訊息佇列 分析及運用

2021-10-02 22:37:06 字數 1108 閱讀 7687

訊息佇列特性為先進先出,底層實現是鍊錶,在核心中建立,有乙個訊息佇列的識別符號來表示,這個佇列當中的每乙個元素都有自己的型別,每乙個型別都有乙個優先順序概念

訊息佇列在作業系統屬性

msgmax:每乙個節點最大訊息的傳送位元組數為8 k

msgmnb:佇列中所有訊息的長度之和 為 16 k

msgmni:系統當中最大的佇列數為 2 k

建立

int msgget(key_t key, int msg***)

msg***:ipc_creat

ipc_creat | ipc_excl

增加訊息佇列的使用許可權,相當於檔案的許可權

傳送

int msgsnd(int msqid, const void* msgq, size_t size, int msg***)

msg***:

0:當佇列滿了,則會阻塞

ipc_nowait:如果佇列滿了,當前的傳送操作不會進行阻塞,函式返回

接收

int msgrcv(int msqid, void* msgq, size_t msgsz, long msgtype, int msg***)

msgtype:

0:表示什麼型別都可以接收

msgtype > 0:則返回佇列中訊息型別為 msgtype 的第乙個訊息

msgtype < 0:返回佇列中訊息型別小於等於msgtype 絕對值的訊息,如果這種訊息越多,則返回型別最小的訊息

銷毀

int msgctl(int msqid, int cmd, struct msqid_ds* buf)

cmd:

ipc_stat

ipc_set

ipc_rmid

生命週期跟隨核心,如果不使用命令刪除,訊息佇列一直存在

訊息佇列可以進行雙向通訊(雙工通訊)

克服了管道的無格式的位元組流的缺點

訊息佇列屬性及常見訊息佇列介紹

訊息佇列是在訊息的傳輸過程中儲存訊息的容器,用於接收訊息並以檔案的方式儲存,乙個佇列的訊息可以同時被多個訊息消費者消費。分布式訊息服務dms則是分布式的佇列系統,訊息佇列中的訊息分布儲存,且每條訊息儲存多個副本,以實現高可用性,如下圖所示。一般來說,訊息佇列具有如下屬性 訊息順序 普通佇列支援 分割...

uc os II 分析(10) 訊息佇列

訊息佇列在任務間可以傳遞多條訊息,由3部分組成 事件控制塊 訊息佇列和訊息 oseventtype os event type q時,描述的就是訊息佇列。1.訊息指標陣列 訊息佇列的核心iushi訊息指標陣列。osqsize 陣列的長度 osqenter 已存放訊息指標的元素數目 osqstart ...

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...