使用Java RealTime的生产者 – 消费者体系结构

我正在使用Java Realtime(Sun JRTS 2.2)设计交易系统,并且想要了解最佳实践的几个问题,因为我害怕发明轮子并且非常确定我的任务已经解决了。

所以我有线程不断读取套接字,解析字节和提取消息(二进制协议)。 之后,我应该向算法发送消息,实际上做了一些计算并决定交易与否。

所以我认为我应该设计这个系统的方法是将它分成两部分。 生产者(定期(?)实时线程从套接字中提取字节,解析它)和消费者(实时线程(周期性/偶发性?)从生产者中提取消息,与它们一起操作等)。

那么第一个问题是如何在这两个线程(生产者/消费者)之间设计高性能通信? 此外,我很想听听有关设计此类系统,建议等的现有经验的评论。

感谢您的帮助!

我正在处理类似的问题但在不同的域中:

以下是我处理的方式:

public class Producer extends Thread{ private BlockingQueue consumerQueue = null; public setConsumerQueue(BlockingQueue val){ consumerQueue = val; } // main method where data is received from socket... public void run(){ while(!interrupted()){ data = socket.receive();// Receive data if(consumerQueue!=null) consumerQueue.offer(data); } } } public class Consumer extends Thread{ private BlockingQueue consumerQueue = new BlockingQueue(); public Consumer (Producer val){ val.setConsumerQueue(consumerQueue); } public void run(){ while(!interrupted()){ data = consumerQueue.take();// block until there is data from producer if(data !=null) processData(data); } } } 

在决定如何分解应用程序时,了解每个阶段需要多长时间以及可以并行完成哪些处理是很有用的。 您希望以微秒为单位计算每个阶段的时间并测量分布。 最有趣的点通常是99%(最差1%),99.9%或99.99%的瓦片延迟。


我会看一下disruptor库。 这是一个相当通用的库,专为高吞吐量和低延迟而设计。


如果你想要更简单的东西,有许多模式可以在亚微秒的时间内在线程之间交换数据,但是这些是依赖于你的特定用例的点解决方案。

您可能会发现此演示文稿很有趣,但它主要涉及测试低延迟,高吞吐量组件和套接字通信。 http://vanillajava.blogspot.com/2011/11/low-latency-slides.html