【发布时间】:2015-06-01 22:57:12
【问题描述】:
我有两个线程:一个主线程执行应用程序的主要处理,一个辅助线程从主线程接收数据批并处理并将它们输出给用户、文件或通过网络。一般来说,数据的处理速度应该比它产生的速度快得多。我想确保主线程永远不会等待辅助线程。辅助线程可以接受任何数量的开销、扩展缓冲区、重做工作等,其唯一目标是最大化主线程的性能。理想情况下,主线程根本不会synchronize。有没有办法将同步成本推送到 Java 中的一个线程上?
【问题讨论】:
-
您是否证明您遇到了阻塞问题?使用简单的
LinkedBlockingQueue不起作用吗? -
第一个线程没有理由等待第二个线程,除了访问用于交换数据的共享数据结构。这应该非常快,而且很少见,因为您将批量数据放入此数据结构,并且辅助线程很少从中获取项目(它大部分时间都在做 IO)。代码在哪里?您是否证明存在同步问题?
-
现在程序正在设计中,我认为这个问题可能对大部分逻辑都在一个线程中的程序很有用。
-
Martin 做了一个关于单写单消费者的无锁队列的演讲,github.com/mjpt777/examples/tree/master/src/java/uk/co/…
标签: java multithreading synchronization overhead