协作进程需要有一种进程间通信机制(简称 IPC),以允许进程相互交换数据与信息。进程间通信有两种基本模型:共享内存和消息传递(消息队列): 共享内存模型会建立起一块供协作进程共享的内存区域,进程通过向此共享区域读出或写入数据来交换信息。 消息传递模型通过在协作进程间交换消息来实现通信。 图1 给出了这两种模型的...
首先消息队列也是两个进程间进行数据传输的一个方式,除了这个作用外,还有一点就是当不同进程间传送消息时,由于进程进耦合度较高(一个进程的改变可能会影响到另一个进程)为了隔离两个进程,在两个进程之间抽出一块空间(消息队列),两个进程间传递的所有消息都必须通过消息队列。 理解消息队列 1、基本概念 消息队列就...
消息队列是由操作系统替我们维护的,在同一时刻,操作系统可能会同时维护很多个消息队列,所以,为了辨别出每个消息队列,操作系统为每一个消息队列分配了一个唯一的标识id。 接下来看一看具体怎么去利用消息队列来实现进程间的通信。 创建一个消息队列--->需要往队列里边发消息--->往队列里边取消息--->通信结束后,要...
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。 四、共享内存 映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但...
不同的进程可以通过同一个名字来操作同一个消息队列。消息通过mq_send和mq_receive来接收和发送,当不需要消息队列的时候,使用mq_close关闭它,关闭不代表删除,消息队列具有系统生存期,可以使用mq_unlink来删除它。对了,Posix mq还提供一个异步接收消息的特性,使用mq_notify函数,该接口向消息队列注册或注销一个通知,...