13

在多线程 Java 应用程序中进行进程间通信的最佳方法是什么。

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

欢迎任何想法!

4

5 回答 5

14

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

如果它是第一个,那么可能是java.util.concurrent之外的东西,比如ConcurrentLinkedQueue就可以了。(我使用 java.util.concurrent 中的类在我的线程之间传递消息并成功。)

如果是后者,那么我只是猜测并建议看一下RMI,尽管我认为它不符合完全可靠的条件——你必须更多地“动手”来管理它。

于 2008-09-09T09:43:22.173 回答
9

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

于 2008-09-09T10:29:51.393 回答
3

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

于 2008-09-09T09:54:56.623 回答
3

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

于 2012-11-27T02:16:37.717 回答
3

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

于 2015-05-15T08:42:41.500 回答