首页 > 解决方案 > 了解协程

问题描述

来自维基百科的段落比较与线程状态:

...这意味着协程提供并发性但不提供并行性...

我知道协程比线程轻,不涉及上下文切换,没有关键部分,因此也不需要互斥锁。令我困惑的是,它的工作方式似乎无法扩展。根据维基百科,协程提供并发,它们协同工作。带有协程的程序仍然是顺序执行指令,这和单核机器上的线程完全一样,但是多核机器呢?在哪些线程上并行运行,而协程与单核机器上的工作方式相同。

我的问题是协程如何在多核机器上比线程执行得更好?

标签: multithreadingcoroutine

解决方案


...多核机器呢?...

协程是一种并发模型(其中两个或多个有状态的活动可以同时进行),但不是并行模型(其中程序将能够使用比单个传统 CPU 更多的硬件资源核心可以提供)。

线程可以彼此独立运行,如果您的硬件支持它(即,如果您的机器有多个内核),那么两个或多个线程可以在同一时刻执行它们的独立活动。

但是,根据定义,协程是相互依赖的。一个协程只有在被另一个协程调用时才会运行,调用者会被挂起,直到当前协程回调它。一组协程中只有一个协程可以在任何给定时刻实际运行。


推荐阅读