各位看官們,大家好,上一回中咱們說的是使用信號量進行進程間同步與互斥的例子,這一回咱們說的例
子是:進程間通信大閱兵。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們在前面的章回中介紹了多種進程間通信的方式,大家可能覺得有點雜亂的感覺,或者有各種疑問:為什麼會有這麼多進程間通信方式呢?這麼多通信方式中哪個最好呢?其實這麼多的進程間通信方式除了歷史的原因外,也與技術的發展有關系。這些通信方式中不能說哪個最好,只能說哪個最適用。具體使用哪種通信方式取決於我們的編程環境。
在本章回中,我們會以閱兵的方式對這些通信方式進行總結與比較,通過閱兵來展現他們的優點,避免它們的缺點。讓大家對他們有更加深刻的認識,以便在寫程序的時候選擇最恰當的通信方式。
參加本次閱兵的方隊來自我軍海陸空三大軍種,他們來自五湖四海,但是為了保家衛國而走在了一起。本次參閱的方隊有信號方隊,管道方隊,無名管道方隊(相對於命令管道FIFO而而言),命名管道方隊,消息隊列方隊,共享內存方隊,信號量方隊。各方隊已經就緒,隨時准備接受檢閱。
升旗!
奏樂!
閱兵儀式正式開始!
看官們,走在閱兵方陣最前面的是信號方隊。信號方隊是我軍歷史上最悠久的部隊。該部隊隨著Unix系統產生而產生,為Unix系統的發展做出了卓越的貢獻。在Linux系統產生後,該部隊也不畏險阻,挻進Linux領域,成為該領域中進程通信的主要方式之一。信號方隊為我軍及時傳遞各種信號,使我們永遠走在敵人的前面,有效地壓制了敵人。
接下來出場的是管道方隊。管道方隊披星戴月,日夜奮戰,有力地保證了進程間的正常通信。他和信號方隊有互補的作用,他的產生有效地解決了信號方隊只能發送信號不能傳遞數據的缺點。他為進程間通信輸送了海量數據,堪比Linux shell中的管道。
俗話說:打仗親兄弟,上陣父子兵。現在出場的就是好比父子兵的無名管道方隊。它們屬於管道這個大分支,所以和前面走過去的管道方隊在服裝上比較類似。無名管道部隊處處做好事,處處不留名,因為他們都是活雷鋒。在父子進程間通信時首選無名管道部隊。
伴隨著嘹亮的軍歌聲,我們送走了無名管道方隊,迎來了命名管道方隊。命名管道部隊也隸屬於管道這個大分支。他們有郊地擴展了戰場,從無名管道只能在父子進程間通信擴展到可以在任何進程間通信。是進程中最常使用的通信方式。命名管道部隊的誕生,好比裝備了高科技設備部隊,為我軍的現代化發展做出了突出的貢獻,堪稱現代化部隊的鼻祖。
一二三四!三大管道方隊的口號聲還在耳邊環繞,消息隊列方隊已經出現在我們眼前。消息隊列部隊是與管道部隊並列的現代化部隊。消息隊列部隊機動靈活,能適用各種做戰環境。哪裡需要就去哪裡,是最令敵人畏懼的部隊。管道部隊傳送的是數據流,消息隊列部隊傳送的是數據塊,而且可以自己控制消息塊的大小和包裝。這就是它靈活性的體現。如果說管道部隊送來的是救命水,那麼消息隊列部隊送來就是保命糧。水是液體,類似數據流;糧食是一袋一袋的,類似於一條一條的消息。進程間通信時需要看消息的類型,可以依據消息的類型來選擇進程間通信的方式,進而提高通信的效率。這比如打仗,不同戰場需要不同的部隊,它們是一個道理。
空中飛機翱翔,地上戰車滾滾。共享內存方隊乘著戰車來接收檢閱。共享內存方隊是我軍中反應最快捷的部隊。他們廣泛使用飛機和戰車來裝備部隊,極大地提高了部隊的作戰速度。神龍見首不見尾是他們一貫的作風,如果哪天發現天降神兵了,哪肯定是共享內存部隊。在我們介紹的這幾種進程間通信方式中,共享內存是最快的通信方式,因為它是在進程的內存中進行通信,而且它還克服了管道單向通信的缺點。
看官們,最後出場的是信號量部隊,他好比部隊的神經網絡,能夠有效地聯絡和指揮各個部隊進行綜合做戰。現代戰爭是綜合形式的戰爭,有了信號量部隊,我們就在現代戰爭中掌握了主動權。進程間通信時會涉及到多個進程,使用信號量可以保證多個進程正常通信。也就是說信號量經常用來解決進程同步與互斥相關的問題。
台下傳來了陣陣的歡呼聲,閱兵儀式在大家的歡呼聲中正式結束!
各位看官,關於進程間通信大閱兵的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。