管道 訊息佇列 共享記憶體

2021-05-31 23:20:07 字數 822 閱讀 1627

管道通訊(pipe)

管道通訊方式的中間介質是檔案,通常稱這種檔案為管道檔案。兩個程序利用管道檔案進行通訊時,乙個程序為寫程序,另乙個程序為讀程序。寫程序通過寫端(傳送端)往管道檔案中寫入資訊;讀程序通過讀端(接收端)從管道檔案中讀取資訊。兩個程序協調不斷地進行寫、讀,便會構成雙方通過管道傳遞資訊的流水線。

利用系統呼叫pipe()建立乙個無名管道檔案,通常稱為無名管道或pipe;利用系統呼叫mknod()建立乙個有名管道檔案,通常稱為有名管道或fifo。

pipe是一種非永久性的管道通訊機構,當它訪問的程序全部終止時,它也將隨之被撤消;它也不能用於不同族系的程序之間的通訊。而fifo是一種永久的管道通訊機構,它可以彌補pipe的不足。

管道檔案被建立後,便可對它進行讀寫操作,通過系統呼叫write()和read()來實現。通訊完畢後,可將管道檔案關閉,用close()來實現。

訊息通訊(message)

訊息通訊方式以訊息緩衝區為中間介質,通訊雙方的傳送和接收操作均以訊息為單位。在儲存器中,訊息緩衝區被組織成佇列,通常稱之為訊息佇列。

建立訊息佇列用系統呼叫msgget()來實現,這一步工作也被稱為訊息佇列的初始化。在進行通訊時,訊息佇列的傳送和接收分別用系統呼叫msgsnd()和msgrcv()來實現。在需要改變佇列的使用許可權及其它一些特性時,用msgctl()來實現。

如果要大規模的複製資料,最快的方法莫過於共享記憶體。管道只是所有的unix都支援,效能上肯定不如共享記憶體。

至於訊息佇列,有些unix系統肯定是不支援的。

管道一般用於父子程序間通訊(有名管道除外,有名管道不限於父子程序通訊)。而訊息佇列可用於你機器上的任何程序間通訊(只要程序有權操作訊息佇列)。

linux 管道 訊息佇列 共享記憶體的對比

管道 管道的優點是不需要加鎖,缺點是預設緩衝區太小,只有4k,同時只適合父子程序間通訊,而且乙個管道只適合單向通訊,如果要雙向通訊需要建立兩個。而且不適合多個子程序,因為訊息會亂,它的傳送接收機制是用read write這種適用流的,缺點是資料本身沒有邊界,需要應用程式自己解釋,而一般訊息大多是乙個...

linux 管道 訊息佇列 共享記憶體的對比

管道 管道的優點是不需要加鎖,缺點是預設緩衝區太小,只有4k,同時只適合父子程序間通訊,而且乙個管道只適合單向通訊,如果要雙向通訊需要建立兩個。而且不適合多個子程序,因為訊息會亂,它的傳送接收機制是用read write這種適用流的,缺點是資料本身沒有邊界,需要應用程式自己解釋,而一般訊息大多是乙個...

ipcs命令檢視管道,訊息佇列,共享記憶體

修改訊息佇列大小 root 使用者 etc sysctl.conf kernel.msgmnb 4203520 kernel.msgmnb 3520 kernel.msgmni 2878 儲存後需要執行 sysctl p 然後重建所有訊息佇列 ipcs q 顯示所有的訊息佇列 ipcs qt 顯示訊...