Think-Swoole教學之設定、工作程序、攜程魅力以及理解 Swoole 程序模式

2020-09-19 18:01:34
下面由教學欄目給大家介紹Think-Swoole教學之設定、工作程序、攜程魅力以及理解 Swoole 程序模式,希望對需要的朋友有所幫助!

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 檢視程序狀態 ,如下圖所示:

企業微信截圖_16004998481910.png

當 Swoole 啟動時,會首先啟動一個 master 主程序,然後會啟動一個 manager 管理子程序,這兩個程序不會去處理請求的工作,請求的處理交給 manager 的子程序 worker。上圖中可見,master 主程序的程序號 30665,manager 子程序 30666 的父程序是 30665,task process 和 worker process 的父程序都是 30666。

設定工作程序數為 2 ,重新啟動 Swoole 服務,再次檢視程序狀態:

企業微信截圖_16004998557086.png

可見,有兩個 worker process 程序。

執行pstree -p 31568,可得到如下關係圖:

企業微信截圖_16004998624194.png

以上就是Think-Swoole教學之設定、工作程序、攜程魅力以及理解 Swoole 程序模式的詳細內容,更多請關注TW511.COM其它相關文章!