3

我也在考虑将破坏者模式集成到我们的应用程序中。在开始使用破坏者之前,我对一些事情有点不确定

  1. 我有 3 个生产者,主要是一个反序列化请求的 FIX 线程。另一个随着市场变化不断修改订单价格的线程。此外,我们还有一个线程负责反序列化从 GUI 应用程序发送的请求。所有三个线程当前都写入阻塞队列(因此​​我们看到队列上有很多争用)
  2. 颠覆者谈到了单一作者原则,从我读到的内容来看,这种方法的规模最好。有什么办法可以让上述三个线程遵守单写原则?
  3. 同样在典型的请求/响应应用程序中,特别是在我们的案例中,我们在内存缓存中存在争用,因为当我们使用响应更新缓存时,我们需要锁定缓存,而请求可能针对相同的顺序发生。我们如何通过破坏者处理这个问题,即我如何绑定对特定请求的响应?如果可以,我可以消除缓存上的锁定吗?

任何建议/指针将不胜感激。我们目前使用的是 Java 1.6

4

1 回答 1

1

我是破坏者的新手,我正在尝试尽可能多地了解用例。我试图回答你的问题。

  1. 是的,Disruptor 可用于对来自多个生产者的调用进行排序。我了解所有 3 个线程都尝试更新共享对象的状态。以及对共享对象采取必要行动的单个消费者。在内部,您可以根据职责让单个消费者委托调用适当的单线程处理程序。这

  2. Disruptor 正是这样做的。它对调用进行排序,使得状态一次只能由一个线程访问。如果调用事件处理程序有特定的顺序,请设置内存屏障。最新版本的 Disruptor 有一个 DSL,可让您轻松设置订单。

  3. Cache 可以通过 Disruptor 进行抽象和访问。一次,只有 Reader 或 Writer 可以访问缓存,因为对缓存的所有调用都是顺序的。

于 2012-07-30T14:15:18.167 回答