协同程序如何比线程更快?

时间:2017-11-03 09:36:09

标签: multithreading performance kotlin coroutine

我试图找到一种情况,将多线程更改为协同程序将加快受影响代码段的处理速度。据我发现,与线程相比,协同程序使用较少的CPU和堆空间,我仍然无法找到协同程序比线程更快的情况。虽然我知道协同程序创建和上下文切换比使用线程的相应操作便宜得多,但我在速度差异方面得到了难以察觉的结果(没有测量线程创建,两种情况都绝对相同)。

那么,是否有可能找到一个案例,其中协程会比线程更快地执行?

1 个答案:

答案 0 :(得分:3)

有一点需要注意的是,当你拥有很多很多协程时,协程会非常优越。您可以毫不犹豫地创建和执行数千个协同程序,如果您尝试通过线程执行此操作,则与线程关联的所有开销可能会快速终止主机。因此,这使您能够在不必管理工作线程和可运行的情况下考虑大规模并行化。它们还可以很容易地实现异步计算模式,这些模式对于基本线程(如通道和actor)来说非常难以实现。

超出了你的问题的范围,但仍然值得注意的是概念的通用性,因为协同程序的用例不仅限于异步计算。协同程序的核心是可挂起的函数,例如它们也可以启用python中的生成器,您不会立即连接到异步编程。