管道
单向的,相当于是内核的一个缓冲区
消息队列
和管道相比,接收的时候不用按顺序一个一个收,可以自定义顺序
套接字
客户端和服务端要分别建立一对套接字,客户端进行监听
常识 | zmq通信_tuuzkiii_Tuu的博客-CSDN博客 zmq算是一种封装好的套接字,本质上又是一种消息队列
信号量
就是semaphore
共享内存
消息队列的具体实现
进程发消息各个字段:根据消息队列id(msqid)确认要发送到的队列,需要发送的数据是给定起始位置(msgp)和数据长度(msgsz),flag用于判定消息队列满时是截断、阻塞还是立即返回
进程接受消息各个字段:根据消息队列id(msqid)确认接收队列,接收数据的起始地址(msgp)和数据长度(msgsz),flag选择阻塞式接收、立即返回、改为接收第一个消息、过长截断
通常,创建队列是在某个大进程初始化的时候,然后在各个线程交互消息的时候再使用这个消息队列。
套接字的具体实现
同步
发出一个功能调用时,在没有得到结果之前,该调用就不返回。而一旦返回,就相当于得到结果
异步
调用者发出一个功能调用后直接返回,因此可以继续执行后续操作。当这个调用完成后,由被调用者通过状态、通知和回调来通知调用者。
阻塞/非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。阻塞调用是指调用结果返回之前,当前线程会被挂起。