消息队列本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消息类型用整数来表示,而且必须大于 0。每种类型的消息都被对应的链表所维护,消息类型为 0 的链表记录了所有消息加入队列的顺序,其中红色箭头表示消息加入的顺序。
消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接受者接受的数据块可以有不同的类型。它有一个不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数(MSGMNB),系统上消息队列的总数上限(MSGMNI)。可以用cat /proc/sys/kernel/msgmax查看具体的数据。
消息队列的原理就这么多,可以自己创建自己的消息队列,用自己设计的id,emmmm,这个非常适合进程间通信。但是这个可能会服务器循环检查,使用信号则能避免这个问题,
信号是中断类型的,这个非常好,用信号+消息队列的方法,可以减轻服务器的负担。消除while(1)循环。
先完成消息队列,再完成信号,二者再合并 。