Ale*_*nov 0 multithreading jvm akka reactive kotlin-coroutines
所有这些框架都在线程之上创建了另一个抽象级别。例如,由于调度的原因,使用 kotlin 协程似乎比纯线程需要更多的 CPU 周期。对于反应式,我们有同样的情况,额外的级别 - 更多的 CPU 周期。虽然我不知道 akka-actors。
即使使用更多的 CPU 周期来调度协程,我们仍然可以通过非阻塞方法获得性能提升。
有人可以详细解释这些收益(或者这是一种权衡吗?),重点关注硬件和操作系统级别?也许在什么情况下我们想要使用协程或reactivex,而当我们因为某些原因不想使用它们时?
线程、协程、参与者等都是并发操作的抽象。这里的主要权衡是并发操作的数量和它们活动的持续时间。
当您有一些并发操作(因为每个线程都很昂贵)并且所有操作都执行大量 CPU 密集型工作(因为线程之间的切换非常昂贵)时,操作系统级线程工作得非常好。
当您有大量并发操作和/或它们从开始到结束或从一个恢复点到下一个挂起时消耗很少的 CPU 时,在操作系统级线程之上创建的各种用户级抽象都可以很好地工作,因为这些抽象是轻量级的,并且它们的启动、停止以及它们之间的切换也非常便宜。