视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Think-Swoole教程之配置、工作进程、携程魅力以及理解 Swoole 进程模式
2020-11-02 18:23:48 责编:小采
文档
下面由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,可得到如下关系图:

下载本文
显示全文
专题