一蛋褥、進(jìn)程通信的目的
1、數(shù)據(jù)傳輸
一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程浴捆。
2蒜田、資源共享
多個(gè)進(jìn)程之間共享同樣的資源。
3选泻、通知事件
一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息冲粤,通知它(它們)發(fā)生了某種事件
4、進(jìn)程控制
有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如 Debug 進(jìn)程)页眯,此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常梯捕,并能夠及時(shí)知道它的狀態(tài)改變。
二窝撵、進(jìn)程通信的方式
1傀顾、管道( pipe )
管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng)碌奉,而且只能在具有親緣關(guān)系的進(jìn)程間使用短曾。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。
2赐劣、有名管道(FIFO)
有名管道也是半雙工的通信方式嫉拐,但是它允許無親緣關(guān)系進(jìn)程間的通信树瞭。
3冤馏、信號
用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生,主要作為進(jìn)程間以及同一進(jìn)程不同線程之間的同步手段巧涧。
4、信號量
信號量是一個(gè)計(jì)數(shù)器判哥,可以用來控制多個(gè)進(jìn)程對共享資源的訪問。它常作為一種鎖機(jī)制碉考,防止某進(jìn)程正在訪問共享資源時(shí)塌计,其他進(jìn)程也訪問該資源。
5侯谁、消息隊(duì)列
消息隊(duì)列是消息的鏈表锌仅,存放在內(nèi)核中。一個(gè)消息隊(duì)列由一個(gè)標(biāo)識符(即隊(duì)列ID)來標(biāo)識墙贱。消息隊(duì)列克服了信號傳遞信息少热芹、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
6惨撇、共享內(nèi)存
共享內(nèi)存(Shared Memory)伊脓,指兩個(gè)或多個(gè)進(jìn)程共享一個(gè)給定的存儲區(qū)。
特點(diǎn):
共享內(nèi)存是最快的一種 IPC魁衙,因?yàn)檫M(jìn)程是直接對內(nèi)存進(jìn)行存取报腔。
因?yàn)槎鄠€(gè)進(jìn)程可以同時(shí)操作,所以需要進(jìn)行同步剖淀。
信號量+共享內(nèi)存通常結(jié)合在一起使用纯蛾,信號量用來同步對共享內(nèi)存的訪問。
7纵隔、套接字
套接字也是一種進(jìn)程間通信機(jī)制翻诉,與其他通信機(jī)制不同的是,它可用于不同機(jī)器間的進(jìn)程通信