Think-Swoole 設定、工作程序、攜程魅力以及理解 Swoole 程序模式
組態檔:
app/config/swoole.php
'server' => [ 'host' => env('SWOOLE_HOST', '0.0.0.0'), // 監聽地址 'port' => env('SWOOLE_PORT', 9501), // 監聽埠 'mode' => SWOOLE_PROCESS, // 執行模式 預設為SWOOLE_PROCESS 'sock_type' => SWOOLE_SOCK_TCP, // sock type 預設為SWOOLE_SOCK_TCP 'options' => [ // 都是給 Swoole 服務的設定,可以根據 Swoole 手冊額外增加其它的 Swoole 設定 'pid_file' => runtime_path() . 'swoole.pid', //服務啟動以後程序 ID 存放檔案 'log_file' => runtime_path() . 'swoole.log', //Swoole 的紀錄檔檔案 'daemonize' => false, //守護行程模式設定,true 後臺執行 // Normally this value should be 1~4 times larger according to your cpu cores. 'reactor_num' => swoole_cpu_num(), //後臺啟動的 Reactor 執行緒數 'worker_num' => swoole_cpu_num(), //設定啟動的 Worker 程序數 'task_worker_num' => swoole_cpu_num(), //設定 Task 程序數 'enable_static_handler' => true, //開啟靜態檔案請求處理功能,需配合 document_root 'document_root' => root_path('public'), //設定靜態檔案根目錄 'package_max_length' => 20 * 1024 * 1024, //設定最巨量資料包尺寸,單位為位元組 'buffer_output_size' => 10 * 1024 * 1024, //設定傳送輸出快取區記憶體尺寸 'socket_buffer_size' => 128 * 1024 * 1024, //用於設定使用者端連線最大允許佔用記憶體數量 ], ],
工作程序:
'worker_num' => swoole_cpu_num(),
這個設定是設定工作程序的, swoole_cpu_num() 是獲取本機CPU核數,如果將它手動設定為 1,那麼同一時間有兩個請求需要處理,一次只能處理一個,另一個處於等候狀態,第一個處理完後會緊接著處理第二個,但他們還是屬於一個程序,兩個請求的程序號是一樣的。如何設定為 2,那麼同時可以處理 2 個請求,並且有兩個不同的程序號。
協程
在 Swoole 的組態檔中,還有一個選項,是設定協程的:
'coroutine' => [ 'enable' => true, 'flags' => SWOOLE_HOOK_ALL, ],
'enable' => true 代表開啟協程。假設現在需要同時處理 3 個請求(也可以更多),即使工作程序設定為 1,這三個請求也可以同時進行處理,但是它們的程序號是一樣的,因為工作程序還是一個。這就是 Swoole 協程的魅力。
理解 Swoole 程序模式
設定工作程序數為 1 ,然後通過命令 php think swoole 開啟服務後,新開命令視窗執行 ps -ef | grep swoole 檢視程序狀態 ,如下圖所示:
當 Swoole 啟動時,會首先啟動一個 master 主程序,然後會啟動一個 manager 管理子程序,這兩個程序不會去處理請求的工作,請求的處理交給 manager 的子程序 worker。上圖中可見,master 主程序的程序號 30665,manager 子程序 30666 的父程序是 30665,task process 和 worker process 的父程序都是 30666。
設定工作程序數為 2 ,重新啟動 Swoole 服務,再次檢視程序狀態:
可見,有兩個 worker process 程序。
執行pstree -p 31568,可得到如下關係圖:
以上就是Think-Swoole教學之設定、工作程序、攜程魅力以及理解 Swoole 程序模式的詳細內容,更多請關注TW511.COM其它相關文章!