Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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_Kotlin_Coroutine_Kotlin Coroutines - Fatal编程技术网

Multithreading 有没有哪个领域的线程应该优先于协程?

Multithreading 有没有哪个领域的线程应该优先于协程?,multithreading,kotlin,coroutine,kotlin-coroutines,Multithreading,Kotlin,Coroutine,Kotlin Coroutines,我刚刚讨论了Kotlin的协同程序,问题是协同程序是否总是可以取代线程,或者是否也有缺点 或者反过来说:是否存在不应使用协同路由的区域?协同路由对于异步编程非常有用。当您编写的代码大部分时间都要等待某些外部事件时,就像在现代连接的用户界面和面向微服务的后端应用程序中经常发生的那样,然后,协同路由和Kotlin挂起函数的概念允许您编写外观自然、易于理解的代码,这些代码比具有显式线程的代码更具可伸缩性 如果您正在编写某种计算、CPU密集型代码,那么您会发现经典的多线程编程模式和并行性工作得更好 这并

我刚刚讨论了Kotlin的协同程序,问题是协同程序是否总是可以取代线程,或者是否也有缺点


或者反过来说:是否存在不应使用协同路由的区域?

协同路由对于异步编程非常有用。当您编写的代码大部分时间都要等待某些外部事件时,就像在现代连接的用户界面和面向微服务的后端应用程序中经常发生的那样,然后,协同路由和Kotlin挂起函数的概念允许您编写外观自然、易于理解的代码,这些代码比具有显式线程的代码更具可伸缩性

如果您正在编写某种计算、CPU密集型代码,那么您会发现经典的多线程编程模式和并行性工作得更好


这并不意味着您不能使用协程来并行化CPU密集型应用程序,但这样做不会在代码可读性或性能方面获得任何好处

如果您在单线程上运行协同路由,那么对于不受IO约束的工作负载,您将仅限于单线程性能。如果您通过跨多个线程运行协程来绕过这个限制,那么您就回到了线程:)协例程在解决方案空间的某个特定角落非常有用。多线程覆盖了更大的解决方案空间。需要多线程和协同例程的解决方案之间的重叠最小。嘿,罗曼!感谢协同程序,尽管我很难理解它们背后的魔力,这使得使用它们非常危险。一旦我了解了魔法,我一定会尝试一下。这只是一种反馈:-)我知道你已经在Kotlin Conf就这个话题进行了讨论。谢谢。看看我在KotlinConf的“深入合作”演讲。它提供了足够的关于实现细节的信息来消除所有的魔法:还有一些中间地带:基于DAG的计算,模型类似于Actors。这是非常CPU密集型的,但是当输出队列填满时,单个工作人员会被阻塞。然后你找到另一个工人来运行。对于成百上千的工作线程,在线程池中使用协同路由比使用本机线程的性能更好。这就是我们在Hazelcast Jet中使用的体系结构,我们已经将Kotlin协程作为原型应用于它(在生产中,我们有一个类似JavaAPI的协程)。Kotlin为我们工作得很好,Java的100%性能!