关于多线程:Java IPC最佳实践

关于多线程:Java IPC最佳实践

Best practice for Java IPC

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

它应该是高性能的(因此请不要使用JMS),易于实现且可靠,因此
对象


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

如果是第一个,那么可能是java.util.concurrent之外的东西,例如ConcurrentLinkedQueue可以解决问题。 (我成功地从java.util.concurrent中的类在线程之间传递了消息。)

如果稍后再讲,那么我只是猜测并建议您看一下RMI,尽管我认为它并不完全可靠-您必须像这样处理更多的"动手操作",例如。


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


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


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


我建议研究整个java.util.concurrent包,该包具有用于处理并发性的多个类以及线程之间的不同通信方式。一切都取决于您要实现的目标,因为您的问题相当笼统。


推荐阅读