首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
关于协程调度和worker进程的问题
### 问题描述 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进程是否能否像多线程一样并行执行呢? 请大佬解答~~
发布于5年前 · 20 次浏览 · 来自
提问
bibi
### 问题描述 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进程是否能否像多线程一样并行执行呢? 请大佬解答~~
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2021-01-08
Rango
Co\run() ----- 这与`Server`的`reactor线程`和`master线程`无关,底层会启动很多个线程,有两种类型:`AIO线程`和`CPU中断线程`。 Swoole\Server ---- 每个`Worker`都是一个单独的协程调度器,不同进程之间是完全隔离的。在单个`Worker`进程内会多创建`AIO线程`和`CPU中断线程`,相当于是在`Server onWorkerStart`中执行了`Co\run()` 多个`Worker`进程就会绑定到多个`CPU`,并行执行。
赞
0
回复
2021-01-08
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
回复
2022-01-25
zimuge
https://blog.csdn.net/a1034996/article/details/122023462 上面网址有一个协程和多进程的评测,看他的评测不管机器是多核还是单核,多进程模式,都没有单进程的协程的性能要好。请问异步websocket服务器和协程websocket服务器,这俩种在多核cpu机器的情况下,是不是性能都是协程websocket服务器占优?
赞
0
回复