在swoole中,因为协程的切换是串行的,在同一个时间点只能运行一个协程,一个协程正在运行时,其他协程会停止工作,所以swoole的协程是基于单线程的。
本教程操作环境:Windows10系统、Swoole4版、DELL G3电脑
简单的说协程是寄宿在线程下程序员实现的一种跟更轻量的并发的协作轻量线程
随着程序员人群的增大,大佬也不断的爆发式增长,当然就开始有人觉得线程不好用了,那怎么办呢?当然是基于线程的理念上再去实现一套更加轻量、更好骗star的一套轻量线程(事实上协程不能完全被认为线程,因为一个线程可以有多个协程)
协程和线程的区别
本质
线程 内核态
协程 用户态
调度方式
线程的调度方式为系统调度,常用的调度策略有分时调度、抢占调度。说白就是线程的调度完全不受自己控制
协程的调度方式为协作式调度 不受内核控制由自由策略调度切换
上述说了协程是用户态的,所以所谓的协作式调度直接可以理解为是程序员写的调度方式,也就是我想怎么调度就怎么调度,而不用通过系统内核被调度。
浅入理解swoole的协程
既然打算浅入理解的swoole的协程,我们必须要知道swoole的协程模型。
swoole的协程是基于单线程。可以理解为协程的切换是串行的,再同一个时间点只运行一个协程.
Swoole的协程在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的。这与线程不同,多个线程会被操作系统调度到多个CPU并行执行。
一个协程正在运行时,其他协程会停止工作。当前协程执行阻塞IO操作时会挂起,底层调度器会进入事件循环。当有IO完成事件时,底层调度器恢复事件对应的协程的执行。
对CPU多核的利用,仍然依赖于Swoole引擎的多进程机制。
推荐学习: swoole教程
以上是swoole协程为什么是单线程的详细内容。更多信息请关注PHP中文网其他相关文章!