Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 协同路由如何比线程更快?_Multithreading_Performance_Kotlin_Coroutine - Fatal编程技术网

Multithreading 协同路由如何比线程更快?

Multithreading 协同路由如何比线程更快?,multithreading,performance,kotlin,coroutine,Multithreading,Performance,Kotlin,Coroutine,我试图找到一种情况,将多线程更改为协同路由将加快受影响代码段的处理速度。据我所知,与线程相比,协同路由使用更少的CPU和堆空间,我仍然找不到协同路由比线程更快的情况。虽然我知道协同程序的创建和上下文切换要比线程的相应操作便宜得多,但我已经得到了速度差异的不可察觉的结果(如果不测量线程创建,两种情况将完全相同) 那么,是否有可能发现协同路由比线程执行更快的情况呢?需要注意的一点是,当您拥有大量的协同路由时,协同路由的优越性会大大提高。如果您试图通过线程创建和执行数千个协同路由,那么与线程相关的所有

我试图找到一种情况,将多线程更改为协同路由将加快受影响代码段的处理速度。据我所知,与线程相比,协同路由使用更少的CPU和堆空间,我仍然找不到协同路由比线程更快的情况。虽然我知道协同程序的创建和上下文切换要比线程的相应操作便宜得多,但我已经得到了速度差异的不可察觉的结果(如果不测量线程创建,两种情况将完全相同)


那么,是否有可能发现协同路由比线程执行更快的情况呢?

需要注意的一点是,当您拥有大量的协同路由时,协同路由的优越性会大大提高。如果您试图通过线程创建和执行数千个协同路由,那么与线程相关的所有开销可能会很快杀死主机。因此,这使您能够考虑大规模并行化,而不必管理工作线程和可运行程序。它们还可以轻松实现异步计算模式,而使用通道和参与者等基本线程实现异步计算模式将非常困难


关于您的问题,超出了范围,但仍然值得注意的是概念的通用性,因为协同路由的用例不仅仅限于异步计算。协同路由的核心是可挂起的函数,例如,它还支持python中的生成器,而您不会立即将其连接到异步编程。

需要注意的一点是,当您拥有大量协同路由时,协同路由的优越性将大大提高。如果您试图通过线程创建和执行数千个协同路由,那么与线程相关的所有开销可能会很快杀死主机。因此,这使您能够考虑大规模并行化,而无需管理工作线程和可运行程序。@Robin请将其作为answer@Ilya完成了,还添加了更多的信息。我同意你的观点,协同程序比线程有更多的优势,但我认为,由于线程上下文切换或其他一些繁重的操作,它们也应该更快一些。我只是想知道,将多线程代码的某些工作部分更改为协同程序是否可行,选择提高速度。@好吧,在速度方面,改进应该是越明显、异步任务越多,而且这些任务本身就越小。因此,如果您在后台线程上进行一些大的下载,那么切换到协同路由在速度方面不会有多大的改进,因为与操作相比,实际的线程开销仍然很小。