首页
文档
问答
捐赠
源代码
商业产品
Swoole Tracker
Swoole Plus
Swoole Compiler
Swoole 微课程
商业合作
登录
注册
EN
全部
提问
分享
讨论
建议
公告
开发框架
发表新帖
关于协程调度和worker进程的问题
bibi
16天前
### 问题描述 1、Co\run()创建的协程里,通过htop查看进程树是由一个进程和n个(cpu核数)线程组成的,这是否分别对应了master进程和reactor线程,呢协程调度是由呢个进程/线程负责的呢? 2、Swoole\Server回调函数中实现的协程,每个worker中都能自己实现协程调度吗?呢如何保证多个worker并行执行的时候swoole实现的单线程协程呢? ### Swoole版本,PHP版本,以及操作系统版本信息 swoole 4.60 php 7.3.25 centos6.8 ### 你期待的结果是什么?实际看到的错误信息又是什么? 查阅某些资料,多核cpu能否实现多个进程并行执行和MMU和cache有关,请问swoole中的worker进程是否能否像多线程一样并行执行呢? 请大佬解答~~
评论
2021-01-07
Rango
Co\run() ----- 这与`Server`的`reactor线程`和`master线程`无关,底层会启动很多个线程,有两种类型:`AIO线程`和`CPU中断线程`。 Swoole\Server ---- 每个`Worker`都是一个单独的协程调度器,不同进程之间是完全隔离的。在单个`Worker`进程内会多创建`AIO线程`和`CPU中断线程`,相当于是在`Server onWorkerStart`中执行了`Co\run()` 多个`Worker`进程就会绑定到多个`CPU`,并行执行。
点赞
0
回复
2021-01-07
bibi
回复
Rango
感谢大佬的回复! 接着您回复的问题我还有几个疑问: 1、假设一个多核cpu,如果有多个Worker进程并行执行,每个Worker中有n个协程在执行,针对于整个程序来看,是不是不同Worker中协程也是并行执行的呢? 2、文档中提出,swoole的协程“没法利用多核 cpu 的,想利用多核 cpu 需要依赖 Swoole 的多进程模型”,请问是不是1⃣️Process\Pool进程池和2⃣️Swoole\Server(SWOOLE_PROCESS模式)中多个Worker进程都是实现多进程模型的方式呢?除此之外还有其他更好的方式吗?
点赞
0
回复
2021-01-12
Rango
协程本质上是单线程的,基于异步 IO 的并发模型,相关的程序代码都是顺序执行的。这与多线程、多进程不同。 如果要利用多核,可以使用 `Swoole\Process`、`Swoole\Process\Pool`或者使用`Swoole\Server`多进程实现并行处理。
点赞
0
回复
2021-01-14
bibi
回复
Rango
明白了谢谢^_^
点赞
0
回复