据我所知,在Akka中,所有参与者都安排在一个线程池中。太多的actor同时执行阻塞IO,每个阻塞调用阻塞一个线程,导致线程中断。
现在我在JVM上看一个有趣的光纤实现 - Quasar允许大量用户线程 - 光纤 - 并使用线程池来安排它们。但是,我想知道当许多光纤调用传统阻塞API时是否会带来好处。
我认为它不会有帮助,因为阻塞API仍会阻止系统线程,而Quasar无法神奇地将其转为仅阻挡光纤。这只是我的猜测,如果我错了,请纠正我。
答案 0 :(得分:7)
Quasar光纤被实现为在ForkJoinPool
上创建和安排的延续任务(默认情况下,但这可以根据需要自定义)。
你是对的,Quasar不会神奇地"#34;将JDK / JVM线程转换为光纤,因此目前线程阻塞调用将阻塞线程池中的线程(当发生这种情况时,Quasar将打印警告)。如果它发生的时间很短并且很少发生,这不是一个大问题,否则最好对它采取一些措施。
如果你很幸运,which is likely and it's getting more and more likely,有人已经为你的线程拦截API编写了一个集成模块,并提供了一个光纤阻塞实现。如果是这种情况,那么您只需要对代码进行微小的更改(如果有的话),以便从低效的线程阻塞切换到有效的光纤阻塞。
否则,您可以自己构建运气并自己编写集成,通常是very easy。如果您这样做,请考虑integrating it back into Comsat。