多线程java应用程序中进程间通信的最佳方法是什么?

它应该是性能(请不要JMS)易于实现且可靠,以便对象和数据只能绑定到一个线程?

欢迎任何想法!

有帮助吗?

解决方案

假设场景 1 JVM,多个线程,那么 java.util.concurrent 确实是需要查看的地方,特别是各种 Queue 实现。然而,在此之上的抽象可能会很好,而且那里 捷特兰 看起来很有趣,轻量级的Java消息传递。

其他提示

你能澄清一下吗?你的意思是单个JVM中的IPC吗?(多线程,是的,但在操作系统级别只有一个进程。)或者您的意思是多个 JVM?(以及真正的操作系统级进程间通信。)

如果是第一个,那么也许是出于某种原因 java.util.concurrent, , 喜欢 并发链接队列 就可以了。(我成功地使用 java.util.concurrent 中的类在线程之间传递消息。)

如果是后者,那么我只会猜测并建议看一下 雷米, ,尽管我认为它完全可靠——你必须更加“亲自动手”来管理它。

我建议查看整个 java.util.concurrent 包,其中有多个类用于处理并发和线程之间不同的通信方式。一切都取决于您想要实现的目标,因为您的问题非常笼统。

您应该使用生产者/消费者队列。通过这样做,您可以避免多线程编程的陷阱:竞争条件和死锁。另外,如果您使用 Disruptor 或 MentaQueue 这样的无锁队列,它不仅更容易、更干净,而且速度也会更快。我写了一篇博客文章,详细讨论了这一点,并展示了如何获得 < 100 纳秒的延迟: 具有两位数纳秒延迟的线程间通信.

我刚刚在 github 上添加了 MappedBus (http://github.com/caplogic/mappedbus)这是一个高效的 IPC 库,它使多个 Java 进程/JVM 能够通过交换消息进行通信,并使用内存映射文件进行传输。经测量,吞​​吐量为 4000 万条消息/秒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top