首頁 >php框架 >ThinkPHP >Think-Swoole教程之配置、工作進程、攜程魅力以及理解 Swoole 進程模式

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

藏色散人
藏色散人轉載
2020-09-19 15:21:502921瀏覽

以下由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 進程模式

以上是Think-Swoole教程之配置、工作進程、攜程魅力以及理解 Swoole 進程模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:阿dai哥。如有侵權,請聯絡admin@php.cn刪除