Linux下tcp並發伺服器的幾種設計的模式套路

來源:互聯網
上載者:User

在做網路服務的時候tcp並發服務端程式的編寫必不可少。tcp並發通常有幾種固定的設計模式套路,他們各有優點,也各有應用之處。下面就簡單的討論下這幾種模式的差異:

    1、 單進程,單線程模式

    在accept之後,就開始在這一個串連串連上的資料收接收,收到之後處理,發送,不再接收新的串連,除非這個串連的處理結束。

    優點:

        簡單。

    缺點:

        因為只為一個用戶端服務,所以不存在並發的可能。

    應用:

        用在只為一個用戶端服務的時候。

   2、 多進程模式

    accept返回成功時候,就為這一個串連fork一個進程,專門處理這個串連上的資料收發,等這個串連處理結束之後就結束這個進程。

    優點:

        編程相對簡單,不用考慮線程間的資料同步等。

    缺點:

        資源消耗大。啟動一個進程消耗相對比啟動一個線程要消耗大很多,同時在處理很多的串連時候需要啟動很多的進程多去處理,這時候對系統來說壓力就會比較大。另外系統的進程數限制也需要考慮。

    應用:

        在用戶端資料不多的時候使用很方便,比如小於10個用戶端。

    3、 多線程模式

    類似多進程方式,但是針對一個串連啟動一個線程。

    優點:

        相對多進程方式,會節約一些資源,會更加高效一些。

    缺點:

        相對多進程方式,增加了編程的複雜度,因為需要考慮資料同步和鎖保護。另外一個進程中不能啟動太多的線程。在Linux系統下線程在系統內部其實就是進程,線程調度按照進程調度的方式去執行的。

    應用:

       類似於多進程方式,適用於少量的用戶端的時候。

    4、 select + 多線程 模式

    有一個線程專門用於監聽連接埠,accept返回之後就把這個描述符放入 描述符集合 fd中,一個線程用select去輪訓描述符集合,在有資料的串連上接收資料,另外一個線程專門發送資料。當然也可以接收和發送用一個線程。描述符可以設定成非阻塞模式,也可以設定成阻塞模式。通常串連設定成非阻塞模式,發送線程獨立出來。

    優點:

         相對前幾種模式,這種模式大大提高了並發量。

    缺點:

         系統一般實作描述項集合是採用一個大數組,每次調用select的時候都會輪詢這個描述符數組,當串連數很多的時候就會導致效率下降。串連數在1000以上時候效率會下降到不能接受。

    應用:

         目前windows 和一般的Unix上的tcp並發都採用select方式,應該說應用還是很廣泛的。

   5、 epoll方式

         在Linux2.6版本之後,增加了epoll。具體的使用是:一個線程專門進行連接埠監聽,accept接收到串連的時候,把該串連設定成非阻塞模式,把 epoll事件設定成邊緣觸發方式,加入到epoll管理。接收線程阻塞在epoll的等待事件函數。另外一個線程專門用於資料發送。

    優點:

        由於epoll的實現方式先進,所以這種方式可以大規模的實現並發。我們現在的應用在一個3年前的dell的pc server可以實現2萬個串連的並發,效能也是很好的。

    缺點:

        由於涉及了線程和非阻塞,所以會導致編碼的複雜度增大一些。這種方式只適用於Linux 2.6

核心以後。

    注意:   

        1。 如果把epoll事件設定成水平觸發效率就下降到類似採用select的水平。

        2。 Unix系統下有單個進程開啟的描述符數目限制,還有系統內開啟的描述符數目限制。系統內開啟的描述符數目限制由軟硬限制兩個。硬限制是根據機器的配置而不同。軟式節流可以更改,但是必須小於系統的硬限制。在suse Linux下,可以在root使用者下,通過ulimit -n 數目  去修改這個限制。

    應用:

        Linux下大規模的tcp並發。

    當前 並發還有其他的方式,比如進程池,線程池等,每種模式都有它的優點和缺點,在適當的情況用合適的模式是最重要的。

    如果需要很大規模的並發,經過測試,個人建議採用epoll方式,放棄通常的select方式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.