ch12 进程间通讯
Overview 进程间是相互保持独立的,内存管理中,就是保护进程的地址空间不被其他进程访问。而进程间通信 ( Inter-process Communication IPC) 用于在一个或多个进程间交换数据 进程间合作是那些可以影响或受其他过程影响的过程。例如网站包含 JS、H5、Flash,当有一个相应缓慢时,会发生整个网站的布局或其他功能的展示。 通常情况下进程间合作被允许的原因有: 信息共享:多个进程需要访问同一个文件。(如管道) 计算加速:将复杂功能拆分为多个子任务(多处理器时效果更佳),可以更快地解决问题 模块化:将整体系统架构分为不同功能模块,模块间相互协作 便利:单用户可以同时多任务处理,如 编辑、编译、打印等 Communications model (a) 消息队列(间接通信) (b) 共享内存(直接通信) Message Passing IPC背后关键的一点是消息的传递,即一个进程发消息,一个进程接收消息 而为了使进程间通信,就必须在进程间建立连接,连接可以是单/双向。连接可以使用直接通信和间接通信来实现 Direct Communication 直接通信,必须明确声明发送者或接收者的名称,通常定义为: Send(P, message):发送信息到进程 P Receive(Q, message):接收来自进程 Q 的信息 在直接通信中,一般连接的属性有以下特征: 一个链路与一对进程相关联 自动建立链接 链接是通用的双向链接 Indirect Communication 间接通信,为异步通信,通常情况下互通信都需要有消息队列;发送者将信息放置消息队列中,接受者从消息队列中取出消息 Send(P, message):像消息队列发送消息 Receive(Q, message):接受消息队列中的消息 每个进程都有唯一ID 共享一个消息队列 在间接通信中,一般连接的属性有以下特征: 一对进程共享消息队列时,才会在进程之间建立链接 链接可以被许多进程关联 链接可以是单向也可以是双向 每个进程可以有多个链接 直接通信 间接通信 Synchronization 从另一方面来讲,消息传递可以是阻塞 Blocking 或非阻塞 Non-Blocking 的;同步 synchronous 会阻塞一个进程,直到发送完成。异步 asynchronous 则是是非阻塞的,发送操作完成后会立即返回不等待返回结果 Buffer 消息通过队列传递,队列的容量则具有下列三种配置之一: 0容量:消息不能存储在队列中,因此发送者必须阻塞,直到接收者接受消息 有限容量:队列中有一定的预先约定大小的容量。如果队列已满,发送者必须阻塞,直到队列中有可用空间(反之为空,接受者阻塞),否则可能是阻塞的或非阻塞的 无限容量:具有无限容量的队列,发送者永远不会被迫阻塞 至此整节围绕对消息传递功能的三个方面做了介绍:...