Java IPC的最佳实践

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

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

欢迎任何想法!

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

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

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

如果是后者,那么我只是猜测并建议看一下RMI ,虽然我认为它没有资格完全可靠 – 你必须管理那些更多的’动手’之类的。

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

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

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