Java IPC的最佳实践

时间:2008-09-09 09:20:37

标签: java multithreading

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

它应该是高性能的(所以没有JMS)易于实现和可靠,所以 对象&数据只能绑定到一个线程?

欢迎任何想法!

5 个答案:

答案 0 :(得分:15)

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

如果是第一个,那么 java.util.concurrent 之类的内容可能就像ConcurrentLinkedQueue一样。 (我通过java.util.concurrent中的类在我的线程中传递消息并成功。)

如果是后者,那么我会猜测并建议看一下 RMI ,虽然我认为它没有资格完全可靠 - 你有管理那些更多的'动手'就像。

答案 1 :(得分:9)

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

答案 2 :(得分:4)

我建议查看整个java.util.concurrent包,它有多个类来处理并发和线程之间的不同通信方式。一切都取决于你想要达到的目标,因为你的问题非常普遍。

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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