并發(fā)服務(wù)器模型

并發(fā)服務(wù)器模型

引子
從09年在企鵝廠實(shí)習(xí)起開始接觸服務(wù)器開發(fā),第一次看到是一份內(nèi)部的PPT,相較于之前接受的ACM/ICPC算法訓(xùn)練、工具程序開發(fā)、和Visual Studio可視化的GUI開發(fā),有種開天辟地的感覺。

然后接著看UNP(《UNIX Network Programming》),逐步的學(xué)到兩點(diǎn):
1)UNIX系提供的編程接口(帶緩沖的IO、Socket接口、鎖、共享內(nèi)存);2)并發(fā)服務(wù)器的設(shè)計模式(阻塞/非阻塞、多線程/多進(jìn)程、select/poll多路復(fù)用)。

再來看POSA2(《Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects》),其結(jié)合了比GOF更加實(shí)際的例子來說明,POSA2給出的例子幾乎都是實(shí)際開發(fā)中遇得到實(shí)實(shí)在在的服務(wù)器設(shè)計問題。GOF也更偏向編程技法,而POSA2更偏向于架構(gòu)設(shè)計。

UNIX系提供的編程接口
從這里開始,接觸到了一個最純粹的操作系統(tǒng)——UNIX:1)面向程序員;2)提供高性能可編程的計算和資源操控(內(nèi)存、硬盤、網(wǎng)絡(luò))的平臺。
這個系統(tǒng)并不面向:1)GUI界面,2)日常辦公。
它的核心就是:1)計算,2)資源操控。
這對于以一種純凈的方式理解好操作系統(tǒng)非常重要:1)程序員需要什么;2)操作系統(tǒng)提供了什么;3)操作系統(tǒng)為什么這樣設(shè)計。從這些接口、操作方式的設(shè)計中,我們可以從其中學(xué)習(xí)到大型系統(tǒng)在設(shè)計時候如何做設(shè)計權(quán)衡(tradeoff&consequence),如何定義設(shè)計空間(design space)并在其中調(diào)節(jié)設(shè)計。

并發(fā)服務(wù)器的設(shè)計模式

首先來看UNP中最重要的章節(jié):“第六章:I/O多路復(fù)用”。
Unix提供了五種不同的I/O模型,并給出了詳細(xì)的配圖:

  1. 阻塞式I/O模型
  2. 非阻塞式I/O模型
  3. I/O復(fù)用模型
  4. 信號驅(qū)動式I/O模型
  5. 異步I/O模型
    下面這個圖可以很直觀的說明問題:

再來看UNP中最最重要的章節(jié):“第三十章:服務(wù)器程序設(shè)計范式”。
UNP列出下面9種服務(wù)器范式,代碼主要邏輯也不難,不過首先得理解:阻塞/非阻塞、多線程/多進(jìn)程、select/poll多路復(fù)用。然后再看看直觀的圖解。

  1. 迭代服務(wù)器
  2. 每個請求fork一個進(jìn)程
  3. prefork若干個進(jìn)程
  4. prefork對accept加文件鎖
  5. prefork對accept加線程鎖
  6. prefork在父進(jìn)程統(tǒng)一accept傳遞fd
  7. 每個請求一個thread
  8. prethread線程,每個線程各自accept,互斥鎖保護(hù)
  9. prethread線程,主線程統(tǒng)一accept傳遞fd

另外,陳碩老師的《Linux 多線程服務(wù)端編程:使用muduo C++ 網(wǎng)絡(luò)庫》也列出了其他更多服務(wù)器范式:

  1. reactor + thread-per-task
  2. reactor + worker thread
  3. reactor + thread poll
  4. reactors in threads
  5. reactors in processes
  6. reactors + thread pool

有哪些可以評價一個并發(fā)服務(wù)器的指標(biāo)?

  1. 吞吐量(Throughput)
  2. QPS
  3. 延遲(latency)
  4. 并發(fā)數(shù)目(concurrency)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容