進(jìn)程間通信

進(jìn)程間通信目的

  1. 數(shù)據(jù)傳輸回右,
  2. 共享數(shù)據(jù)境钟,一個(gè)進(jìn)程對(duì)數(shù)據(jù)的修改令花,另外的進(jìn)程能立刻看到阻桅;
  3. 通知事件凉倚,一個(gè)進(jìn)程向另一個(gè)(一組)進(jìn)程發(fā)送消息,通知它們發(fā)生了什么事件(子進(jìn)程終止時(shí)通知父進(jìn)程嫂沉,Qt的消息機(jī)制)稽寒;
  4. 資源共享,多個(gè)進(jìn)程共享臨界資源趟章,需要內(nèi)核提供鎖和同步機(jī)制杏糙;
  5. 進(jìn)程控制,有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(Debug進(jìn)程)蚓土,此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常宏侍,并能夠及時(shí)知道它的狀態(tài)改變。

進(jìn)程間通信方式

1.信號(hào)

用于通知接收進(jìn)程某件事情發(fā)生蜀漆;信號(hào)由內(nèi)核管理谅河,在linux下每個(gè)進(jìn)程都有自己獨(dú)立的虛擬內(nèi)存空間,互不干擾嗜愈。

當(dāng)A進(jìn)程要通知B進(jìn)程某事件發(fā)生時(shí)旧蛾,A進(jìn)程將通知信號(hào)交給內(nèi)核莽龟,由內(nèi)核負(fù)責(zé)通知B進(jìn)程蠕嫁,即內(nèi)核充當(dāng)進(jìn)程A、B的郵遞員毯盈。

進(jìn)程不僅可以發(fā)送信號(hào)給另一進(jìn)程(kill)剃毒,還可以發(fā)送信號(hào)給自身(raise)

缺點(diǎn):承載信號(hào)少,一般來說只是一個(gè)整型數(shù)字搂赋。

2. 管道

管道是一種半雙工通信方式赘阀,數(shù)據(jù)只能單向流動(dòng),
匿名管道用于父到子(孫脑奠。基公。)單向進(jìn)程間通信;
有名管道(FIFO)還可用于無親緣關(guān)系的進(jìn)程間通信宋欺;

缺點(diǎn):1)只能操作無格式字節(jié)流轰豆;2)緩沖區(qū)大小有限;
3)FIFO長(zhǎng)期存在系統(tǒng)中齿诞,使用不當(dāng)容易出錯(cuò)酸休。

3. IPC

3.1 信號(hào)量

信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)進(jìn)程對(duì)共享資源的訪問祷杈,常作為一種鎖機(jī)制斑司,通過PV原語(yǔ)來同步信號(hào)量S;
P原語(yǔ)(wait)申請(qǐng)一個(gè)單位資源但汞,若S>0,則將S--宿刮,進(jìn)程繼續(xù)執(zhí)行互站;否則進(jìn)程循環(huán)等待資源;
V原語(yǔ)(signal)釋放一個(gè)單位資源僵缺,S++云茸;
主要用于進(jìn)程間同步手段,還可以是進(jìn)程下的線程間同步谤饭;

系統(tǒng)調(diào)用 semget()

3.2 消息隊(duì)列

多個(gè)進(jìn)程共同維護(hù)一個(gè)隊(duì)列标捺,有寫權(quán)限的進(jìn)程向隊(duì)列中添加信息,有讀權(quán)限的進(jìn)程讀走信息揉抵。
主要用于進(jìn)程間交換短信息亡容,由內(nèi)核管理,不需要考慮同步問題(系統(tǒng)函數(shù)調(diào)用實(shí)現(xiàn)信息發(fā)送和接受間的同步冤今;
在實(shí)際操作中需要在內(nèi)核態(tài)和用戶態(tài)間進(jìn)行4次數(shù)據(jù)拷貝闺兢;

優(yōu)點(diǎn):克服承載信息少,只能操作無格式字節(jié)流等問題戏罢,且不需要考慮同步問題屋谭;
缺陷: 信息的復(fù)制消耗CPU時(shí)間,所以不適合信息量大和操作頻繁的場(chǎng)合龟糕。
系統(tǒng)調(diào)用msgget()

3.3 共享內(nèi)存

多個(gè)進(jìn)程共享內(nèi)存桐磁,直接讀取內(nèi)存,不需要任何數(shù)據(jù)拷貝讲岁。
通過mmap()系統(tǒng)調(diào)用使得進(jìn)程間通過映射同一文件(linux下一切皆可看成文件)到各自的虛擬內(nèi)存空間我擂,從而共享文件,是最快的通信方式缓艳,在內(nèi)存緩沖區(qū)直接交換信息校摩,

優(yōu)點(diǎn): 克服消息緩沖通信效率低問題;無需復(fù)制阶淘、信息量大衙吩。
缺陷: 1)直接將共享內(nèi)存映射到進(jìn)程的虛擬地址空間中,需要進(jìn)程自己管理同步問題(常與信號(hào)量結(jié)合使用溪窒,來處理進(jìn)程間同步問題)坤塞;
2)內(nèi)存實(shí)體存放在計(jì)算機(jī)系統(tǒng),因此只能是一臺(tái)機(jī)器內(nèi)的進(jìn)程共享霉猛,不方便網(wǎng)絡(luò)通信尺锚。
系統(tǒng)調(diào)用shmget()

4. socket通信

用于不同機(jī)器間的進(jìn)程通信。

總結(jié)

  1. 信號(hào):承載信息少惜浅;
  1. 管道:操作簡(jiǎn)單瘫辩;但速度慢,容量有限,只有父子進(jìn)程能通訊伐厌,單向通信承绸;
  2. FIFO:任何進(jìn)程間都能通訊;但速度慢挣轨,且長(zhǎng)期存在系統(tǒng)中军熏,使用不當(dāng)容易出錯(cuò);
  3. 信號(hào)量:不能傳遞復(fù)雜消息卷扮,只能用來同步荡澎;
  4. 消息隊(duì)列:信息復(fù)制需要額外消耗CPU時(shí)間,不適用與消息量大或操作頻繁的場(chǎng)合晤锹;
  5. 共享內(nèi)存區(qū):無需復(fù)制摩幔,快捷,信息量大鞭铆,速度快或衡,但要保持同步;

上述的進(jìn)程通信方式?jīng)]有絕對(duì)的優(yōu)與劣之分车遂,在具體使用過程中封断,根據(jù)當(dāng)前場(chǎng)景的不同,選擇合適的進(jìn)程通信方式舶担,如:當(dāng)用戶進(jìn)程傳遞的消息很少坡疼,或是通過信號(hào)來觸發(fā)某些行為,那么使用信號(hào)通信方式就是個(gè)不錯(cuò)的選擇柄沮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末回梧,一起剝皮案震驚了整個(gè)濱河市废岂,隨后出現(xiàn)的幾起案子祖搓,更是在濱河造成了極大的恐慌,老刑警劉巖湖苞,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拯欧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡财骨,警方通過查閱死者的電腦和手機(jī)镐作,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隆箩,“玉大人该贾,你說我怎么就攤上這事“齐” “怎么了杨蛋?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我逞力,道長(zhǎng)曙寡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任寇荧,我火速辦了婚禮举庶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揩抡。我一直安慰自己户侥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布峦嗤。 她就那樣靜靜地躺著添祸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寻仗。 梳的紋絲不亂的頭發(fā)上刃泌,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音署尤,去河邊找鬼耙替。 笑死,一個(gè)胖子當(dāng)著我的面吹牛曹体,可吹牛的內(nèi)容都是我干的俗扇。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼箕别,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铜幽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起串稀,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤除抛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后母截,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體到忽,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年清寇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喘漏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡华烟,死狀恐怖翩迈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盔夜,我是刑警寧澤负饲,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布搅方,位于F島的核電站,受9級(jí)特大地震影響绽族,放射性物質(zhì)發(fā)生泄漏姨涡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一吧慢、第九天 我趴在偏房一處隱蔽的房頂上張望涛漂。 院中可真熱鬧,春花似錦检诗、人聲如沸匈仗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悠轩。三九已至,卻和暖如春攻泼,著一層夾襖步出監(jiān)牢的瞬間火架,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工忙菠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留何鸡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓牛欢,卻偏偏與公主長(zhǎng)得像骡男,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子傍睹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容