進程間通信(IPC)

進程間通信的機制包括共享內存和消息傳遞系統兩大類。

共享內存

共享內存是指兩個相互協作的進程之間有重疊的地址空間,兩者都可以通過訪問這段地址空間來進行通信或協作;這種方式同樣適用於線程之間的通信,並且同一個進程的不同線程本身就共享堆內存。對共享內存的訪問需要協調,一般的語言庫都會提供相應的協調機制(本質上還是操作系統實現的,只不過語言庫構建與操作系統之上,作爲API提供給開發者)。Java提供了Object.wait()和Obejct.notify(),雖然現在Java都不提倡使用這兩個方法,因爲正確的使用這兩個方法比較困難;因此Java基礎類庫裏的併發庫提供了更加高級的協調機制,比如併發容器(ConcurrentHashMap),阻塞隊列(BlockingQueue,生產者-消費者隊列),同步器(CountDownLatch, Semaphore)。

注:生產者-消費者隊列也稱爲工作隊列

消息傳遞系統

消息傳遞系統是另一種進程間通信的方式,它包括直接通信和間接通信;直接通信是指消息發送者和接收者之間除了信道,沒有第三個實體;間接通信是指發送者和接收者之間還有一個第三者在協調。

直接通信:需要通信的進程必須明確的指出消息發送者或接收者,如管道和命名管道。

間接通信:消息通過郵箱或端口來發送和接收,郵箱可以被進程擁有或者被操作系統擁有;這種機制的實際例子就是消息隊列;端口對應的就是Socket通信

發佈了65 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章