2012年10月18日 星期四

[轉][Linux] - Linux IPC到底是什麼東西?


看Linux的資料,覺得很不爽的就是各個概念很多,什麼東西都取一個名字,然後抽象的又取個名字,特別是加上中文翻譯作者經常又翻譯出不同的意思、不同的版本來,看的實在是有點暈,其實最後弄明白了也就是那些東西。
 
IPC Inter-Process Communication 進程間通信。
一開始我還以為有個專門的進程間通信的機制呢,原來這只是一個統一稱呼而已,真實的通信用的機制是:semaphore,message queue,pipe,mutex,share memory等。
 
下面轉一個別人寫的IPC方面的資料連接,不熟悉的可以看看:
原帖發表在IBM的developerworks網站上,是一個系列的文章,作者鄭彥興,通過講解和例子演示了Linux中幾種IPC的使用方式,我覺得很好,在這裡做一個保留,能看完的話Linux IPC的基礎是沒有問題的了。

一)Linux環境進程間通信(一)管道及有名管道

二)Linux環境進程間通信(二):信號

三)Linux環境進程間通信(三)消息隊列

四)Linux環境進程間通信(四)信號燈

五)Linux環境進程間通信(五):共享內存

------------------------------
各種通信方式的優缺點
1)unix下面系統本身就是用管道(pipe)進行通信的,事實上就是比較簡單,而且比較簡單   
  2)socket會帶來一些額外的開銷,如網絡開銷,系統安全等等,不建議用,除非不是同一台機器   
  3)共享內存,控制起來麻煩,但是速度是會,帶來的麻煩就是程序要添加一些瑣或者是信號量,程序寫的不好容易出現死瑣現象   
  4)通過文件進行通信,不過這個速度是最慢的  
  5)消息隊列是消息的鏈接表,包括Posix消息隊列systemV消息隊列。有足夠權限的進程可以向隊列中添加消息,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信​​息量少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。但開銷比較大。