java - 寻找具有线程池和最小调度延迟的 ExecutorService

标签 java scala garbage-collection executorservice low-latency

寻找ExecutorService喜欢 ThreadPoolExecutorForkJoinPool但将任务添加到工作队列并将其出队执行的延迟最小。

非常希望它能够感知 CPU 缓存并具有可调整的退避策略和线程工厂。

或者至少是 cooking 它的部分的最佳例子。

最佳答案

minimal latency for adding tasks to work queue and dequeueing them for execution.

这些库都具有相同的延迟,这很大程度上取决于您拥有的硬件和操作系统(因为它进行线程调度)

没有影响延迟的特定选项。

其他选项包括使用;

  • 不使用另一个线程,这具有最小的延迟,并具有内置的退避策略;)
  • 忙于等待消费者线程。
  • 如果消费者跟不上,则减慢生产者的速度。

您可能感兴趣的几个库是 Disruptor 库,它是一个超低延迟环形缓冲区,支持忙等待,还有我的一个库 Java Chronicle,它几乎免费为您提供所有消息/任务的持久性并且您的消费者可以落后于生产者任意数量,几乎没有影响(例如落后许多 GB)

CPU cache aware

这两个库都通过最大限度地减少产生的垃圾量来提高缓存利用率。 ExecutorService 会产生一些垃圾,但到目前为止最大的延迟是唤醒消费者线程。

关于java - 寻找具有线程池和最小调度延迟的 ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245199/

相关文章:

c# - 当我们没有析构函数时为什么要调用 SuppressFinalize

java - 如何检测 JMX 代理是否正在运行,以及使用哪个端口?

java - 哪一个是更好的方法?使用 PJSIP 或 SIP Android API 构建基于 SIP 的调用应用程序

scala - 使用 Scala 2.10 运行 Scala^Z3

JavaFX - 垃圾收集无法清理对象

java - 无法访问的对象不是从堆中收集的垃圾

java - 在运行时删除日志文件,slf4j+logback不会再次创建它

java - 调整 JLabel 的大小小于它的图标?

c# - C# 中 Scala 的列表的协变和逆变 Monadic 类型

scala - 处理容器停止/重新加载事件