Linux下幾種併發服務器的實現模式

Linux下的幾種併發服務器的設計模式linux

1>單線程或者單進程設計模式

  至關於短連接,當accept以後,就開始數據的接收和數據的發送,不接受新的鏈接,即一個server,一個client服務器

  不存在併發。多線程

2>循環服務器和併發服務器併發

  1.循環服務器:一個server只能一次只能接收一個client,噹噹前client結束訪問以後才能進行下一個client的鏈接。socket

  2.併發服務器:一個server同一時間能夠響應不少客戶端的訪問。函數

3>select+多線程模式線程

 併發服務器的三種實現方式設計

  1.多進程併發服務器server

  是指TCP鏈接後,每個客戶機的請求並不禁服務器直接處理,而是由服務器建立一個子進程來處理

  2.多線程併發服務器

  多進程服務器是對多進程的服務器的改進,因爲多進程服務器在建立進程時要消耗較大的系統資源,因此用線程來取代進程,這樣服務處理程序能夠較快的建立。據統計,建立線程於建立進程要快10100倍,因此又把線程稱爲「輕量級」進程。進程與進程不一樣的是:一個進程內全部線程共享相同的全局內存,全局變量等信息。

  是指TCP鏈接後,每個客戶機的請求並不禁服務器直接處理,而是由服務器創

  3.多路複用I/O    

  I/O是爲了解決線程/進程阻塞在那個I/O調用中,經常使用select或者pool

 

4>epoll

  在linux2.6以後有的epoll,實用的方法是:用一個線程專門進行端口的監聽,accept接收到鏈接的時候,把鏈接設置成非阻塞方式,把epoll時間設置成邊緣觸發方式,加入epoll管理。接收線程阻塞在epoll的等待事件函數。另一個線程專門用於數據發送。

  注意:

    1.若是把epoll設置成水平觸發效率就降低採用select的水平。

    2.Unix系統下有單個進程打開的描述符的限制,還有系統內打開的描述符的數目限制。系統內打開的描述符數目限制由軟硬連接限制兩個。硬鏈接是根據機器的配置而不一樣。軟鏈接限制能夠修改可是必須小於硬限制。

  應用:

    Linux下大規模的TCP併發。

    當前併發還有其它的方式。好比線程池。進程池等,每種模式都有他的優缺點,若是大規模的併發,採用epoll會更好。

epoll的時間設置有邊緣觸發方式和水平觸發方式

   1.水平觸發方式:

      若是文件描述符已經就緒能夠非阻塞的執行IO操做了,此時會觸發通知。容許在任意時候重複檢測IO的狀態,沒有必要每次描述符就緒後儘量多的執行IO,select,poll就屬於水平觸發事件。

      只要知足要求就觸發一個事件。

   2.邊緣觸發方式:

      若是文件描述符自上次狀態改變後有新的IO活動到來,此時會觸發通知。在收到一個IO事件通知儘量多的執行IO操做,由於若是再一次通知中沒有執行完IO那麼就須要等到下一次新的IO活動到來才能獲取就緒的描述符。信號驅動式IO就屬於邊緣觸發。

      每當狀態改變就觸發一個事件。

     eg:如今有一個1000個字節的報文,不管是水平觸發仍是邊緣觸發,都會發送一個只讀通知,當收到了100個字節後,水平觸發由於還有字節沒有讀完,就會發送一個只讀通知,可是邊緣觸發會一直保持等待的通知,等待接下來的報文的到來,直到邊緣觸發返回EWOULDBLOCK就摒棄這個socket。

相關文章
相關標籤/搜索