跨进程文件与网络数据交互的那些骚套路
2024-02-04 09:48:49
技术的溯源与历史的钩沉
进程间交互的概念在我们日常的开发中并不少见,其实质上的含义就是进程之间共享数据和文件资源。自进程被发明出来之后,在进程之间的共享资源上就进行了不少的尝试,从最早的内存映射到后续基于文件系统的一致性读写操作,进程之间可以共享的东西越来越多,方式也越加的灵活。
技术演进的历程演变到今天
现在进程之间共享数据有两种方法:
- 通过 Binder 实现 IPC 通信。Binder IPC 是 Android 系统提供给我们进行进程间 通信 的一种方式。
- 通过共享内存实现 IPC 通信。共享内存是进程之间共享的一块内存区,进程间可以通过这块共享内存来传递数据。
一般我们实现 IPC 通信时都是通过 Binder IPC 通信,因为通过 Binder IPC 通信可以实现进程间代码的执行,而通过共享内存无法实现进程间代码的执行。
IPC 技术在现代手机的操作实战
IPC 通信在我们日常的开发中有很多的应用,比如:
- 应用的跳转。Binder IPC 通信可以用于进程间跳转,比如我们打开一个 Activity 的时候,是通过 Intent 进行跳转的,Intent 就是通过 Binder IPC 通信来实现的。
- 服务的绑定和解绑。Binder IPC 通信还可以用于服务的绑定和解绑,比如我们绑定一个服务的时候,是通过 Binder IPC 通信来实现的。
- 进程间数据传递。Binder IPC 通信还可以用于进程间数据传递,比如我们从一个 Activity 发送数据到另一个 Activity 的时候,是通过 Binder IPC 通信来实现的。
IPC 通信在我们日常的开发中很常见,掌握了 IPC 通信的原理和使用方法,能够帮助我们开发出更加灵活和高效的应用程序。
Binder 技术的学习与借鉴对行业生态的作用
Binder IPC 通信是进程间共享数据的常用方法,但也不是唯一方法,与它相对应的还有类似的命名空间、文件读写等方式。除了进程间共享数据,更进一步,我们还可以实现进程之间的文件交互,这里说的文件交互并不是单纯的文件互相读取,而是文件在进程内存之间的映射与读写,就是俗话说的——共享映射文件。
从进程与文件的交互原理上来看,内存映射文件技术实现思路已经算得上一种绝妙的思路,因为其优点显而易见:它可以将文件或者其他设备的资源直接映射到进程的内存中,从而实现进程间快速高效的文件和数据的共享。
这种进程间共享文件内容的技术,我们既可以称其为文件映射,也可以叫其为跨进程的内存共享,其主要目的都是为了实现进程间高效文件资源共享。
对比文件映射技术的深挖,binder IPC技术在当下有着更开阔的市场前景
相对Binder IPC技术来说,文件映射技术在效率上的优越性显而易见。但是需要注意是,这种技术效率快也与其使用环境和目标狭窄有着很大的相关,它主要适用于那些只允许某些特定程序进行操作的文件或者数据资源,而这些文件和数据往往有着特殊的要求,比如:文件只允许被部分程序或者部分用户读写,或者是只允许局部修改。
总结思辨与后续的发展
在某些条件中,文件映射技术对比进程的灵活度也是局限性较大的,所以,最终在使用上,这种方式还是局限于内核的某些特定操作,在寻常的开发者层级上,利用的可行性与操作可能还只能停于抽象的层面上,想要真正实现它,实际仍然难以涉及。
但是,话虽如此,对于用户程序来说,想要摆脱Binder IPC技术存在的一系列的技术局限,却是一条正在或已经铺就的明确道路。毕竟作为一个成熟的,多年来被作为标准 IPC 技术方案的技术,它在某些技术方面的局限性早已暴露在程序开发者们面前,换一种更加轻量的方案是迟早要发生的。
从技术实现的角度来讲,这部分的实现可以从原来的本地Binder IPC技术方案的演进开始,开始逐渐向全新的IPC技术过渡,比如某些基于channel,或者message传递的技术。如此便可以同时获得更好的用户态IPC性能,进而解决过多的进程所导致的系统资源竞争问题,减轻内核IPC在大量进程的调用的负担。
技术演进,彼此的借鉴与融合是推动技术迭代的永恒动力。