天天看點

web server架構之一Simple Multiple Threaded Achitecture

Web Server的架構基本分為多線程和事件驅動兩個基本觀點,在實作上對多線程和事件驅動取長補短形成了流水線的架構。

     在Web Server高并發,高吞吐率,低資源消耗,低延遲的要求下,Web Server的發展也曆經了事件驅動占主流,到多線程反擊[1][2],以及比較成熟的流水線架構。

     在多線程的優點主要是容易了解,對資源的使用很容易飽和,缺點是上下文切換太多(線程代碼段1份,10萬個線程的話,就是重複10萬份,要想無上下文切換就需要要10萬個核),資源占用過多(線程建立需要給線程棧配置設定記憶體,雖有辦法降低這個消耗,但依然可觀),同步代碼調試困難(正确性很難驗證)。

     事件驅動的主要缺點是系統的資源(記憶體,CPU)不容易飽和使用,使用者響應時間較長。優點是程式設計簡單,可以支援很高的并發量,linux2.6核心開始支援的epoll就是事件驅動的典型實作,事件驅動可以支援很高的并發量。

     流水線的架構是介于多線程和事件驅動之間的一種形态,是目前廣泛采用的架構。

     從本次開始,依次将會介紹

     1)簡單的多線程架構

     2)基于線程池的多線程架構

     3)簡單的事件驅動架構(将會結合epoll進行介紹)

     4)流水線的架構(cooperative multithreading Model和lock-free queue的相關介紹)

     5)多流水線的架構

    下圖是簡單的多線程架構,很容易了解,不再贅述,未完待續。

    螺旋線表線程的含義,如下圖所示合計4個線程。Accept Loop承擔的是dispatch任務的線程,其餘線程處理使用者請求。

    帶箭頭環線表示循環,帶箭頭直線表示控制流。

    detached表示線程執行完後即退出,是以一個線程的從生到死隻為一個client的request服務。

web server架構之一Simple Multiple Threaded Achitecture

繼續閱讀