天天看點

《UNIX網絡程式設計 卷2:程序間通信(第2版)》——導讀

《UNIX網絡程式設計 卷2:程式間通信(第2版)》——導讀

**

前言

大多數重要的程式都涉及程序間通信(interprocess communication, ipc)。這是受下述設計原則影響的自然結果:把應用程式設計為一組互相通信的小片斷比将其設計為單個龐大的程式更好。從曆史角度看,應用程式有如下幾種建構方法。

(1)用一個龐大的程式完成全部工作。程式的各部分可以實作為函數,函數之間通過參數、傳回值和全局變量來交換資訊。

(2)使用多個程式,程式之間用某種形式的ipc進行通信。許多标準的unix工具都是按這種風格設計的,它們使用shell管道(ipc的一種形式)在程式之間傳遞資訊。

(3)使用一個包含多個線程的程式,線程之間使用某種ipc。這裡仍然使用術語ipc,盡管通信是線上程之間而不是在程序之間進行的。

還可以把後兩種設計形式結合起來:用多個程序來實作,其中每個程序包含幾個線程。在這種情況下,程序内部的線程之間可以通信,不同的程序之間也可以通信。

上面講述了可以把完成給定任務所需的工作分到多個程序中,或許還可以進一步分到程序内的多個線程中。在包含多個處理器(cpu)的系統中,多個程序也許可以(在不同的cpu上)同時運作,或許給定程序内的多個線程也能同時運作。是以,把任務分到多個程序或線程中有望減少完成指定任務的時間。

本書較長的描述了以下4種不同的ipc形式:

(1)消息傳遞(管道、fifo和消息隊列);

(2)同步(互斥量、條件變量、讀寫鎖、檔案和記錄鎖、信号量);

(3)共享記憶體(匿名的和具名的);

(4)遠端過程調用(solaris門和sun rpc)。

本書不讨論如何編寫通過計算機網絡通信的程式。這種通信通常涉及使用tcp/ip協定族的套接字api,相關主題在第1卷[stevens 1998]中有詳細讨論。

有人可能會提出質疑:不應該使用單主機或非網絡ipc(本卷的主題),所有程式都應該在網絡上的多台主機上同時運作。但在日常實踐中,單主機ipc往往比網絡通信快得多,而且有時還簡單些。共享記憶體、同步等方法通常也隻能用于單主機,跨網絡時可能無法使用。經驗和曆史表明,非網絡ipc(本卷)與跨網絡ipc(第1卷)都是需要的。

**[第1章 簡介

<a href="https://yq.aliyun.com/articles/100307">1.2 程序、線程與資訊共享</a>

<a href="https://yq.aliyun.com/articles/100315">1.3 ipc對象的持續性</a>

<a href="https://yq.aliyun.com/articles/100326">1.4 名字空間</a>

<a href="https://yq.aliyun.com/articles/100332">1.5 fork、exec和exit對ipc對象的影響</a>

<a href="https://yq.aliyun.com/articles/100348">1.6 出錯處理:包裹函數</a>

<a href="https://yq.aliyun.com/articles/100360">1.7 unix标準</a>

1.7.1 osix

1.7.2 open group

1.7.3 unix版本和移植性

<a href="https://yq.aliyun.com/articles/100371">1.8 書中ipc例子索引表</a>

<a href="https://yq.aliyun.com/articles/100379">1.9 小結</a>

**[第2章 posix ipc

<a href="https://yq.aliyun.com/articles/100401">2.2 ipc名字</a>

<a href="https://yq.aliyun.com/articles/100414">2.3 建立與打開ipc通道</a>

<a href="https://yq.aliyun.com/articles/100416">2.4 ipc權限</a>

<a href="https://yq.aliyun.com/articles/100417">2.5 小結</a>