流管道:
訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還 可以傳送訊號給程序本身。
訊息佇列是訊息的鏈結表,包括posix訊息佇列system v訊息佇列。有足夠許可權的 程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。
訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺限。
程序可以將同一段共享記憶體連線到它們自己的位址空間,所有程序都可以訪問共享記憶體中的位址,如果某個程序向共享記憶體內寫入資料,所做的改動將立即影響到可以訪問該共享記憶體的其他所有程序。
共享記憶體的方式像極了多執行緒中線程對全域性變數的訪問,大家都對等地有權去修改這塊記憶體的值,這就導致在多程序併發下,最終結果是不可預期的。所以對這塊臨界區的訪問需要通過訊號量來進行程序同步。
但共享記憶體的優勢也很明顯,首先可以通過共享記憶體進行通訊的程序不需要像無名管道一樣需要通訊的程序間有親緣關係。其次記憶體共享的速度快,不存在讀取檔案、訊息傳遞等過程,只需要到相應對映到的記憶體位址直接讀寫資料即可。
共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步和通訊。
在提到共享記憶體方式時也提到,程序共享記憶體和多執行緒共享全域性變數非常相似。所以在使用記憶體共享的方式是也需要通過訊號量來完成程序間同步。
多執行緒同步的訊號量是posix訊號量, 而在程序裡使用system v訊號量。
主要作為程序間以及同一程序不同執行緒之間的同步手段。
套接字也是一種程序間通訊機制,與其它通訊機制不同的是,它可用於不同機器間的程序通訊。
程序間的通訊方式,執行緒間的通訊方式 程序
當時做筆記的時候 忘了在 看到的了,有時間我再研究研究 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semo...
程序間通訊的方式?執行緒間通訊的方式?
管道 命名管道 訊號量 訊息佇列 訊號及共享記憶體只適用於本地程序間通訊,套接字則可用於遠端通訊,因而一般用於網路程式設計。部分概念解釋 匿名管道是在快取中開闢的輸出和輸入檔案流的空間,只能用於父子關係的程序之間。因為父子程序的輸入和輸出檔案描述符是一致的。命名管道是一種實際存在的fifo檔案,稱作...
程序間通訊方式
謝謝作者 用於程序間通訊 ipc 的四種不同技術 共享記憶體,臨界區,管道,訊息 1.訊息傳遞 管道,fifo,posix和system v訊息佇列 2.同步 互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈 3.共享記憶體區 匿名共享記憶體區,有名posix共享記憶體區,...