热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

swoole进程模型

简介swoole的进程模型简单理解就是当启动一个服务时swoole是怎么处理的,怎么做到数据的收发处理案例从网上找了一段非常常见的代码

简介

swoole的进程模型简单理解就是当启动一个服务时swoole是怎么处理的,怎么做到数据的收发处理


案例

从网上找了一段非常常见的代码

class Server
{
private $serv;
public function __construct() {
$this->serv = new swoole_server("0.0.0.0", 9502);
$this->serv->set([
'worker_num' => 3,
'task_worker_num' => 3,
]);
$this->serv->on('Start', function ($serv) {
echo "SWOOLE:".SWOOLE_VERSION . " 服务已启动".PHP_EOL;
echo "SWOOLE_CPU_NUM:".swoole_cpu_num().PHP_EOL;
});
$this->serv->on('Receive', function ($serv, $fd, $from_id, $data) { });
$this->serv->on('Task', function ($serv, $task) { });
$this->serv->on('Finish', function ($serv, $task_id, $data) {});
$this->serv->start();
}
}
$server = new Server();

环境说明

OS: Mac

PHP:73

运行cli命令启动服务

启动完毕之后,查看启动的进程数据

$ ps -ef | grep serv.php
501 23544 1961 0 12:40下午 ttys000 0:00.11 php serv.php
501 23545 23544 0 12:40下午 ttys000 0:00.00 php serv.php
501 23546 23545 0 12:40下午 ttys000 0:00.00 php serv.php
501 23547 23545 0 12:40下午 ttys000 0:00.00 php serv.php
501 23548 23545 0 12:40下午 ttys000 0:00.00 php serv.php
501 23549 23545 0 12:40下午 ttys000 0:00.00 php serv.php
501 23550 23545 0 12:40下午 ttys000 0:00.00 php serv.php
501 23551 23545 0 12:40下午 ttys000 0:00.00 php serv.php
501 23555 21372 0 12:41下午 ttys004 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox serv.php

上面一共有9个进程显示,其中最后一个是运行ps -ef | grep serv.php 的命令产生的,去除这个一个有8个进程,可以看出23544是其他进程的父进程,然后我们使用树状显示

$ pstree -p 23544
-+= 00001 root /sbin/launchd
\-+= 01959 lis2 /Applications/iTerm.app/Contents/MacOS/iTermServer /Users/lis2
\-+= 01960 root login -fp lis2
\-+= 01961 lis2 -zsh
\-+= 23544 lis2 php serv.php //master
\-+- 23545 lis2 php serv.php//manager
|--- 23546 lis2 php serv.php
|--- 23547 lis2 php serv.php
|--- 23548 lis2 php serv.php
|--- 23549 lis2 php serv.php
|--- 23550 lis2 php serv.php
\--- 23551 lis2 php serv.php

结合swoole官方的进程模型图例

image

pid = 23544 是master进程

pid = 23545 是manager进程

其他的是manager进程产生的woker进程和task进程

然后打开Mac的活动监视器,查看主进程的线程

image

可以看出主进程有四个线程

通过上面的分析不难看出为什么swoole是不需要Nginx或apache这类应用服务器了,原来swoole会产生那么多进程和线程来进行处理数据的收发



推荐阅读
author-avatar
Ailsa大宝贝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有