Think-Swoole教程之配置、工作進程、攜程魅力以及理解 Swoole 進程模式

下面由thinkphp教程欄目給大家介紹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 查看進程狀態 ,如下圖所示:

Think-Swoole教程之配置、工作進程、攜程魅力以及理解 Swoole 進程模式

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

配置工作進程數為 2 ,重啟 Swoole 服務,再次查看進程狀態:

Think-Swoole教程之配置、工作進程、攜程魅力以及理解 Swoole 進程模式

可見,有兩個 worker process 進程。

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

Think-Swoole教程之配置、工作進程、攜程魅力以及理解 Swoole 進程模式

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享