進程之間的通信方式以及優缺點
管道(PIPE)
有名管道:一種半雙工的通信方式,它允許無親緣關系進程間的通信
優點:可以實現任意關系的進程間的通信
缺點:
長期存于系統中,使用不當容易出錯
緩沖區有限
無名管道:一種半雙工的通信方式,只能在具有親緣關系的進程間使用(父子進程)
優點:簡單方便
缺點:
局限于單向通信
只能創建在它的進程以及其有親緣關系的進程之間
緩沖區有限
信號量(Semaphore):一個計數器,可以用來控制多個線程對共享資源的訪問
優點:可以同步進程
缺點:信號量有限
信號(Signal):一種比較復雜的通信方式,用于通知接收進程某個事件已經發生
消息隊列(Message Queue):是消息的鏈表,存放在內核中并由消息隊列標識符標識
優點:可以實現任意進程間的通信,并通過系統調用函數來實現消息發送和接收之間的同步,無需考慮同步問題,方便
缺點:信息的復制需要額外消耗 CPU 的時間,不適宜于信息量大或操作頻繁的場合
共享內存(Shared Memory):映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問
優點:無須復制,快捷,信息量大
缺點:
通信是通過將共享空間緩沖區直接附加到進程的虛擬地址空間中來實現的,因此進程間的讀寫操作的同步問題
利用內存緩沖區直接交換信息,內存的實體存在于計算機中,只能同一個計算機系統中的諸多進程共享,不方便網絡通信
套接字(Socket):可用于不同計算機間的進程通信
優點:
傳輸數據為字節級,傳輸數據可自定義,數據量小效率高
傳輸數據時間短,性能高
適合于客戶端和服務器端之間信息實時交互
可以加密,數據安全性強
缺點:需對傳輸的數據進行解析,轉化成應用級的數據。
鎖機制:包括互斥鎖/量(mutex)、讀寫鎖(reader-writer lock)、自旋鎖(spin lock)、條件變量(condition)
互斥鎖/量(mutex):提供了以排他方式防止數據結構被并發修改的方法。
讀寫鎖(reader-writer lock):允許多個線程同時讀共享數據,而對寫操作是互斥的。
自旋鎖(spin lock)與互斥鎖類似,都是為了保護共享資源。互斥鎖是當資源被占用,申請者進入睡眠狀態;而自旋鎖則循環檢測保持者是否已經釋放鎖。
條件變量(condition):可以以原子的方式阻塞進程,直到某個特定條件為真為止。對條件的測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一起使用。
信號量機制(Semaphore)
無名線程信號量
命名線程信號量
信號機制(Signal):類似進程間的信號處理
屏障(barrier):屏障允許每個線程等待,直到所有的合作線程都達到某一點,然后從該點繼續執行。
線程間的通信目的主要是用于線程同步,所以線程沒有像進程通信中的用于數據交換的通信機制
任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。