以下由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檢視進程狀態,如下圖所示:
當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 進程模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!