首页 > 作文

Swoole 启动一个服务,开启了哪些进程和线程?

更新时间:2023-04-07 06:37:25 阅读: 评论:0

目录

概述

swoole 启动一个服务,开启了哪些进程和线程?

为了解决这个问题,咱们启动一个最简单的服务,一起看看究竟启动了哪些进程和线程?

然后结合官网运行流程图,对每个进程和线程进行归类。

服务启动后打印出当前 swoole 版本 和 当前 cpu 核数。

打印 swoole 版本,是让大家可以下载这个版本 去运行代码。

打印 cpu 核数,是因为这个参数下面会用到。

废话不多说,直冲出亚马逊电影接看代码吧。

代码

rv.php

<?phpclass rver{    private $rv;    public function __construct() {        $this->rv = new swoole_rver("0.0.0.0", 9502);        $this->rv->t([            'worker_num'      => 3,            'task_worker_num' => 3,        ]);        $this->rv->on('start', function ($rv) {            echo "swoole:".swoole_version . " 服务已启动".php_eol;            echo "swoole_cpu_num:".swoole_cpu_num().php_eol;        });        $this->rv->on('receive', function ($rv, $fd, $from_id, $data) { });        $this->rv->on('task', function ($rv, $task) { });        $this->rv->on('finish', function ($rv, $task_id, $data) {});        恩师留言$this->rv->start();    }}$rver = new rver();

上面的代码简单说下,创建了一个 tcp 服务器,启动了 3 个 worker 进程, 3 个 task 进程,因为启用了 task 功能,所以必须注册 ontask、onfinish 2 个事件的回调函数。

咱们运行一下:

使用 ps 查看下:

16390 的父进程是 16389。

16393、16394、16395、16396、16397、16398 的父进程是 16390。

有没有发现,16391、16392 去哪啦?是不是很奇怪。

再用 pstree 查看下:

出来了吧,16391、16392 是线程 与 16390 进程一个层级。

现在我们了解了,启动的这个服务使用了 8 个进程、2 个线程。

我们一起看下官方 swoole rver 的文档:

看下这张图:

通过上面的图,我们可以得到结论:

16389 是 master 进程。

16390 是 manager 进程。

16391、16392 是 reactor 线程。

16393、16394、16395、16396、16397、16398 包括 3 个 worker 进程,3 个 task 进程。

小结

一、为什么是 3 个 worker 进程、3 个 task 进程?

因为,在创建服务的时候我们进行了设置 worker_num = 3, task_worker_num = 3。

worker_num 如果不进行设置,默认为 swoole_cpu_num,在上面咱们打印出来了,默认为 2,最大不超过,swoole_cpu_num * 1000,具体详情,看官方文档。

worker_num 文档:代北

task_worker_num 文档:

二、为什么是 2 个 reactor 线程?它是干什么的?

因为,reactor 线程数,默认为 swoole_cpu_num,也可以通过 r杨广在位几年eactor_num 参数进行设置。

reactor_num 文档:

它是真正处理 tcp 连接,收发数据的线程。

reactor线程 文档:

三、reactor、worker、taskworker 的关系是什么样的?

一个通俗的比喻,假设就业面rver就是一个工厂,那reactor就是销售,接受客户订单。而worker就是工人,当销售接到订单后,worker去工作生产出客户要的东西。而taskworker可以理解为行政人员,可以帮助worker干些杂事,让worker专心工作。

官方已经解释的很详细了,看官方文档吧:

如果你想学习 swoole 可以看下这个 《swoole 文章汇总(10 篇)》。

本文欢迎转发,转发请注明作者和出处,谢谢!

本文发布于:2023-04-07 06:37:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b97b5054642fcc54371caff5a9baf50e.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Swoole 启动一个服务,开启了哪些进程和线程?.doc

本文 PDF 下载地址:Swoole 启动一个服务,开启了哪些进程和线程?.pdf

下一篇:返回列表
标签:进程   线程   文档   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图