2023年5月5日
韓 天峰
swoole的強大之處就在與其程序模型的設計,既解決了非同步問題,又解決了並行。
swoole啟動後主執行緒會負責監聽server socket,如果有新的連線accept,主線程會評估每個reactor執行緒的連線數量。將此連線分配給連線數最少的reactor執行緒。這樣的好處是
每個reactor執行緒持有的連線數是非常均衡的,沒有單個執行緒負載過高的問題
解決了驚群問題,尤其是擁有多個listen socket時,節約了執行緒喚醒和切換的開銷
主線程內還接管了所有訊號signal的處理,使reactor執行緒執行中可以不被訊號打斷。
swoole執行中會建立乙個單獨的管理程序,所有的worker程序和task程序都是從管理程序fork出來的。管理程序會監視所有子程序的退出事件,當worker程序發生致命錯誤或者執行生命週期結束時,管理程序會**此程序,並建立新的程序。
swoole擁有多執行緒reactor,所以可以充分利用多核,開啟cpu親和設定後,reactor執行緒還可以繫結單獨的核,節約cpu cache開銷。
swoole的reactor執行緒是全非同步非阻塞的,即使你的worker程序用了同步模式,依然不影響reactor執行緒的效能。在worker程序組很繁忙的狀況下,reactor執行緒完全不受影響,依然可以收發處理資料。
tcp是流式的,沒有邊界,所以處理起來很麻煩。reactor執行緒可以根據eof或者包頭長度,自動快取資料,組裝資料報。等乙個請求完全收到後,再投遞給worker程序。
與傳統的半同步半非同步伺服器不同,swoole的worker程序可以是同步的也可以非同步的,這樣帶來了最大的靈活性。當你的server需要很高效能,業務邏輯較為簡單時你可以選擇非同步模式。當業務邏輯複雜多變,可以選擇同步模式。
這裡要比node.js強大太多了。
swoole除了reactor執行緒,worker程序外還提供了taskworker程序池,目的是為了解決在業務**中,有些邏輯部分不需要馬上執行。利用task程序池,可以方便的投遞乙個非同步任務去執行,在worker程序空閒時再去捕獲任務執行的結果。
swoole的程序模型架構
swoole的強大之處就在與其程序模型的設計,既解決了非同步問題,又解決了並行。swoole啟動後主執行緒會負責監聽server socket,如果有新的連線accept,主線程會評估每個reactor執行緒的連線數量。將此連線分配給連線數最少的reactor執行緒。這樣的好處是 每個reactor...
swoole的程序模型架構
swoole的強大之處就在與其程序模型的設計,既解決了非同步問題,又解決了並行。swoole啟動後主執行緒會負責監聽server socket,如果有新的連線accept,主線程會評估每個reactor執行緒的連線數量。將此連線分配給連線數最少的reactor執行緒。這樣的好處是 每個reactor...
程序執行緒及swoole程序模型
程序和執行緒,涉及到作業系統的基本知識,但是很多人都是不懂的,因為php簡單易學,大部分人在零基礎學 php程式設計的時候都沒有去了解這些,在學習 swoole 之前必須要了解程序執行緒這樣我們才能對 swoole 的執行機制有一定的了解,更易於開發。這是阮一峰所寫的乙個解釋,寫的非常不錯。1 計算...