在诸如ReactX,Kotlin-协程,Akka-actor之类的框架中进行编程的权衡?

问题描述

所有这些框架在线程之上创建了另一个抽象层次。例如,由于调度,使用kotlin-协程似乎比纯线程需要更多的cpu周期。对于反应式,我们有相同的情况,额外的级别-更多的cpu周期。虽然我不知道akka演员。

即使使用更多的cpu周期进行协程调度,由于采用非阻塞方法,我们仍可能获得性能提升。

有人可以重点说明硬件和操作系统级别来详细解释这些收益(还是权衡?)?也许在什么情况下我们将要使用协程或reactx,而又由于某种原因而不想使用它们?

解决方法

线程,协程,参与者等都是并发操作的抽象。这里要权衡的是那些并发操作的数量及其活动的持续时间。

当您有一些并发操作(因为每个线程都很昂贵)并且所有操作都执行大量的CPU绑定工作(因为在线程之间切换非常昂贵)时,操作系统级别的线程才能很好地工作。

当您有大量的并发操作和/或它们从头到尾或从​​一个恢复点到运行时消耗很少的CPU时,在OS级线程之上创建的各种类型的用户级抽象效果很好。下一次暂停,因为这些抽象是轻量级的,并且它们之间的启动,停止和切换也非常便宜。