進程間交互的幾種方式

進程間交互的幾種方式

????????進程間通信就是在不同進程之間傳播或交換信息,那么不同進程之間存在著什么雙方都可以訪問的介質呢碗降?進程的用戶空間是互相獨立的政恍,一般而言是不能互相訪問的,唯一的例外是共享內存區(qū)家破。但是颜说,系統(tǒng)空間卻是“公共場所”购岗,所以內核顯然可以提供這樣的條件汰聋。除此以外,那就是雙方都可以訪問的外設了喊积。在這個意義上烹困,兩個進程當然也可以通過磁盤上的普通文件交換信息,或者通過“注冊表”或其它數據庫中的某些表項和記錄交換信息乾吻。廣義上這也是進程間通信的手段髓梅,但是一般都不把這算作“進程間通信”。因為那些通信手段的效率太低了绎签,而人們對進程間通信的要求是要有一定的實時性枯饿。

進程間通信主要包括管道, 系統(tǒng)IPC(包括消息隊列,信號量,共享存儲), SOCKET.

管道包括三種:

1)普通管道PIPE, 通常有種限制,一是半雙工,只能單向傳輸;二是只能在父子進程間使用.

2)流管道s_pipe: 去除了第一種限制,可以雙向傳輸.

3)命名管道:name_pipe, 去除了第二種限制,可以在許多并不相關的進程之間進行通訊.

系統(tǒng)IPC的三種方式類同,都是使用了內核里的標識符來識別.

管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動诡必,而且只能在具有親緣關系的進程間使用奢方。進程的親緣關系通常是指父子進程關系。

# 有名管道 (named pipe) : 有名管道也是半雙工的通信方式爸舒,但是它允許無親緣關系進程間的通信蟋字。

# 信號量( semophore ) : 信號量是一個計數器,可以用來控制多個進程對共享資源的訪問扭勉。它常作為一種鎖機制鹊奖,防止某進程正在訪問共享資源時,其他進程也訪問該資源涂炎。因此忠聚,主要作為進程間以及同一進程內不同線程之間的同步手段。

# 消息隊列( message queue ) : 消息隊列是由消息的鏈表唱捣,存放在內核中并由消息隊列標識符標識咒林。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點爷光。

# 信號 ( sinal ) : 信號是一種比較復雜的通信方式垫竞,用于通知接收進程某個事件已經發(fā)生

# 共享內存( shared memory ) :共享內存就是映射一段能被其他進程所訪問的內存蛀序,這段共享內存由一個進程創(chuàng)建欢瞪,但多個進程都可以訪問。共享內存是最快的 IPC 方式徐裸,它是針對其他進程間通信方式運行效率低而專門設計的遣鼓。它往往與其他通信機制,如信號兩重贺,配合使用骑祟,來實現(xiàn)進程間的同步和通信回懦。

# 套接字( socket ) : 套解口也是一種進程間通信機制,與其他通信機制不同的是次企,它可用于不同及其間的進程通信怯晕。

FAQ1: 管道與文件描述符,文件指針的關系??

答: 其實管道的使用方法與文件類似,都能使用read,write,open等普通IO函數. 管道描述符來類似于文件描述符. 事實上, 管道使用的描述符, 文件指針和文件描述符最終都會轉化成系統(tǒng)中SOCKET描述符. 都受到系統(tǒng)內核中SOCKET描述符的限制. 本質上LINUX內核源碼中管道是通過空文件來實現(xiàn).

FAQ2: 管道的使用方法??

答: 主要有下面幾種方法: 1)pipe, 創(chuàng)建一個管道,返回2個管道描述符.通常用于父子進程之間通訊. 2)popen, pclose: 這種方式只返回一個管道描述符,常用于通信另一方是stdin or stdout; 3)mkpipe: 命名管道, 在許多進程之間進行交互.

FAQ3: 管道與系統(tǒng)IPC之間的優(yōu)劣比較??

答: 管道: 優(yōu)點是所有的UNIX實現(xiàn)都支持, 并且在最后一個訪問管道的進程終止后,管道就被完全刪除;缺陷是管道只允許單向傳輸或者用于父子進程之間.

系統(tǒng)IPC: 優(yōu)點是功能強大,能在毫不相關進程之間進行通訊; 缺陷是關鍵字KEY_T使用了內核標識,占用了內核資源,而且只能被顯式刪除,而且不能使用SOCKET的一些機制,例如select,epoll等.

FAQ4: WINDOS進程間通信與LINUX進程間通信的關系?

答: 事實上,WINDOS的進程通信大部分移植于UNIX, WINDOS的剪貼板,文件映射等都可從UNIX進程通信的共享存儲中找到影子.

FAQ5: 進程間通信與線程間通信之間的關系?

答: 因為WINDOWS運行的實體是線程, 狹義上的進程間通信其實是指分屬于不同進程的線程之間的通訊.而單個進程之間的線程同步問題可歸并為一種特殊的進程通信.它要用到內核支持的系統(tǒng)調用來保持線程之間同步. 通常用到的一些線程同步方法包括:Event, Mutex, 信號量Semaphore, 臨界區(qū)資源等.

摘自:http://blog.csdn.net/yufaw/article/details/7409596

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缸棵,隨后出現(xiàn)的幾起案子舟茶,更是在濱河造成了極大的恐慌,老刑警劉巖堵第,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吧凉,死亡現(xiàn)場離奇詭異,居然都是意外死亡踏志,警方通過查閱死者的電腦和手機阀捅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來针余,“玉大人饲鄙,你說我怎么就攤上這事『桑” “怎么了傍妒?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長摸柄。 經常有香客問我颤练,道長,這世上最難降的妖魔是什么驱负? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任嗦玖,我火速辦了婚禮,結果婚禮上跃脊,老公的妹妹穿的比我還像新娘宇挫。我一直安慰自己,他們只是感情好酪术,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布器瘪。 她就那樣靜靜地躺著,像睡著了一般绘雁。 火紅的嫁衣襯著肌膚如雪橡疼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天庐舟,我揣著相機與錄音欣除,去河邊找鬼。 笑死挪略,一個胖子當著我的面吹牛历帚,可吹牛的內容都是我干的滔岳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼挽牢,長吁一口氣:“原來是場噩夢啊……” “哼谱煤!你這毒婦竟也來了?” 一聲冷哼從身側響起卓研,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤趴俘,失蹤者是張志新(化名)和其女友劉穎睹簇,沒想到半個月后奏赘,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡太惠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年磨淌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凿渊。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡梁只,死狀恐怖,靈堂內的尸體忽然破棺而出埃脏,到底是詐尸還是另有隱情搪锣,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布彩掐,位于F島的核電站构舟,受9級特大地震影響,放射性物質發(fā)生泄漏堵幽。R本人自食惡果不足惜狗超,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朴下。 院中可真熱鬧努咐,春花似錦、人聲如沸殴胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽团滥。三九已至竿屹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惫撰,已是汗流浹背羔沙。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厨钻,地道東北人扼雏。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓坚嗜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诗充。 傳聞我的和親對象是個殘疾皇子苍蔬,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容