【问题标题】:Does a blocking IO in Quasar's fiber block a thread in its threadpool?Quasar 的光纤中的阻塞 IO 是否会阻塞其线程池中的线程?
【发布时间】:2015-06-25 09:52:23
【问题描述】:

据我所知,在Akka 中,所有参与者都安排在一个线程池上。太多actor同时执行阻塞IO,每个阻塞调用阻塞一个线程,导致线程中断。

现在我正在研究 JVM 上的一个有趣的光纤实现——Quasar,它允许大量用户线程——光纤——并使用线程池来调度它们。但是,我想知道当许多纤程调用传统阻塞 API 时是否有好处。

我不认为这会有所帮助,因为阻塞 API 仍然会阻塞系统线程,并且 Quasar 无法神奇地将其转变为仅阻塞纤程。这只是我的猜测,如果我错了,请纠正我。

【问题讨论】:

    标签: java akka actor fibers quasar


    【解决方案1】:

    Quasar 纤程实现为在ForkJoinPool 上创建和计划的延续任务(默认情况下,但如果您愿意,甚至可以按纤程自定义)。

    你是对的,Quasar 不会“神奇地”将 JDK/JVM 线程转换为纤程,因此目前线程阻塞调用将阻塞线程池中的线程(并且当发生这种情况时,Quasar 会打印警告)。如果它发生的时间很短且很少发生,这不是一个大问题,否则最好采取一些措施。

    如果你幸运的话,which is likely and it's getting more and more likely,有人已经为你的线程阻塞 API 编写了一个集成模块,并提供了它的光纤阻塞实现。如果是这种情况,那么您只需对代码进行微小的更改(如果有的话),就可以从低效的线程阻塞切换到高效的光纤阻塞。

    否则,您可以自己建立运气并自己编写集成,通常是veryeasy。如果你这样做,请考虑integrating it back into Comsat

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2016-09-26
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多