介绍一下进程之间的通讯,以及我在工做中对于进程通讯的选择。android
为何有这个进程通讯的概念呢。缓存
其实是由于进程是一个独立的运行单位,它分配的内存地址不可以被其余进程访问,这样的设计实际上是为了安全。安全
可是有时候咱们进程之间须要交换信息,那么怎么办呢?操做系统给了咱们路口。app
进程通讯有下面几种方式:操作系统
图:设计
看图:code
举个栗子。blog
不知道各位有没有开发过android,android app之间是如何通讯的呢?队列
app确定是不一样的进程,他们有一种Ashmem来实现共享内存,有兴趣能够看看。进程
管道是指用于链接读写进程的一个共享文件,又名pipe 文件。其实就是在内存中开辟一个大小固定的缓冲区。
注:管道只能采用半双工通讯,某一段时间内只能实现单项的传输。若是要实现双通道,那么要两根。
它的运做方式是这样的,好比说进程一写完了数据后,进程二才能去读取数据。
这种管道是1对1的概念,只能一个进程对另一个进程,而不能1对多。
由于是这样子的,只有管道写满以后,另一个进程才能读取,在另一个进程读取完毕以后,前面一个进程才能继续写。
因此说管道通讯实际上是有很是严格的要求的。
进程间的数据交换以格式化的消息为单位。进程经过操做系统提供的"发送消息/接收消息"两个原语来进行数据交换。
具体操做以下:
消息传递有两种方式,一种是直接通讯方式,一种是间接通讯方式。
直接通讯是这样子的,一个进程经过发送原语发送消息,这些消息操做系统会把这些消息挂载到目的进程消息缓存队列中,若是目的进程须要接收,那么目的进程能够经过接收原语接收。
所谓原语,通常是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程当中不可被中断。
间接通讯方式,消息先发送到中间实体(信箱)中,所以也称“信箱通讯方式”。
形象点以下: