回覆列表
  • 1 # 區塊鏈研究實驗室

    伺服器併發模型通常可分為單執行緒和多執行緒模型,這裡的執行緒通常是指“I/O執行緒”,即負責I/O操作,協調分配任務的“管理執行緒”,而實際的請求和任務通常交由所謂“工作者執行緒”處理。通常多執行緒模型下,每個執行緒既是I/O執行緒又是工作者執行緒。所以這裡討論的是,單I/O執行緒+多工作者執行緒的模型,這也是最常用的一種伺服器併發模型。我所在的專案中的server程式碼中,這種模型隨處可見。它還有個名字,叫“半同步/半非同步“模型,同時,這種模型也是生產者/消費者(尤其是多消費者)模型的一種表現。

    這種架構主要是基於I/O多路複用的思想(主要是epoll,select/poll已過時),透過單執行緒I/O多路複用,可以達到高效併發,同時避免了多執行緒I/O來回切換的各種開銷,思路清晰,易於管理,而基於執行緒池的多工作者執行緒,又可以充分發揮和利用多執行緒的優勢,利用執行緒池,進一步提高資源複用性和避免產生過多執行緒。

    epoll是linux下高併發伺服器的完美方案,因為是基於事件觸發的,所以比select快的不只是一個數量級。

    單執行緒epoll,觸發量可達到15000,但是加上業務後,因為大多數業務都與資料庫打交道,所以就會存在阻塞的情況,這個時候就必須用多執行緒來提速。

  • 中秋節和大豐收的關聯?
  • 怎樣看待高校幫別人佔座的現象?