PHP协程的原理、应用场景和性能优势有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1644个文字,预计阅读时间需要7分钟。
在讲协程之前,先谈谈多进程、多线程、并行和并发。
对于单核处理器,多进程实现多任务的本质是操作系统给每个任务分配一个CPU时间片,轮流执行,这样看起来像是同时执行。
简单来说,多进程是在不同的CPU核心上并行执行多个任务,而多线程是在单个核心上通过时间片切换快速切换执行多个任务。并行是指多个任务同时进行,而并发是指多个任务交替进行。在单核处理器上,多线程是通过时间片切换来模拟并行的。
多任务 (并行和并发)
在讲协程之前,先谈谈多进程、多线程、并行和并发。
对于单核处理器,多进程实现多任务的原理是让操作系统给一个任务每次分配一定的 CPU 时间片,然后中断、让下一个任务执行一定的时间片接着再中断并继续执行下一个,如此反复。
由于切换执行任务的速度非常快,给外部用户的感受就是多个任务的执行是同时进行的。
多进程的调度是由操作系统来实现的,进程自身不能控制自己何时被调度,也就是说: 进程的调度是由外层调度器抢占式实现的
而协程要求当前正在运行的任务自动把控制权回传给调度器,这样就可以继续运行其他任务。这与抢占式的多任务正好相反, 抢占多任务的调度器可以强制中断正在运行的任务, 不管它自己有没有意愿。如果仅依靠程序自动交出控制的话,那么一些恶意程序将会很容易占用全部 CPU 时间而不与其他任务共享。
协程的调度是由协程自身主动让出控制权到外层调度器实现的
回到刚才生成器实现 xrange 函数的例子,整个执行过程的交替可以用下图来表示:
协程可以理解为纯用户态的线程,通过协作而不是抢占来进行任务切换。
相对于进程或者线程,协程所有的操作都可以在用户态而非操作系统内核态完成,创建和切换的消耗非常低。
本文共计1644个文字,预计阅读时间需要7分钟。
在讲协程之前,先谈谈多进程、多线程、并行和并发。
对于单核处理器,多进程实现多任务的本质是操作系统给每个任务分配一个CPU时间片,轮流执行,这样看起来像是同时执行。
简单来说,多进程是在不同的CPU核心上并行执行多个任务,而多线程是在单个核心上通过时间片切换快速切换执行多个任务。并行是指多个任务同时进行,而并发是指多个任务交替进行。在单核处理器上,多线程是通过时间片切换来模拟并行的。
多任务 (并行和并发)
在讲协程之前,先谈谈多进程、多线程、并行和并发。
对于单核处理器,多进程实现多任务的原理是让操作系统给一个任务每次分配一定的 CPU 时间片,然后中断、让下一个任务执行一定的时间片接着再中断并继续执行下一个,如此反复。
由于切换执行任务的速度非常快,给外部用户的感受就是多个任务的执行是同时进行的。
多进程的调度是由操作系统来实现的,进程自身不能控制自己何时被调度,也就是说: 进程的调度是由外层调度器抢占式实现的
而协程要求当前正在运行的任务自动把控制权回传给调度器,这样就可以继续运行其他任务。这与抢占式的多任务正好相反, 抢占多任务的调度器可以强制中断正在运行的任务, 不管它自己有没有意愿。如果仅依靠程序自动交出控制的话,那么一些恶意程序将会很容易占用全部 CPU 时间而不与其他任务共享。
协程的调度是由协程自身主动让出控制权到外层调度器实现的
回到刚才生成器实现 xrange 函数的例子,整个执行过程的交替可以用下图来表示:
协程可以理解为纯用户态的线程,通过协作而不是抢占来进行任务切换。
相对于进程或者线程,协程所有的操作都可以在用户态而非操作系统内核态完成,创建和切换的消耗非常低。

