0

我是 Disruptor 的新手。我有以下两个查询:

Q1。我得到了一个生产者对一个消费者一个生产者对多个依赖消费者的示例代码,

我喜欢为多个生产者或多个消费者或定序器获取示例代码:3P – 1C。您能否向我推荐任何博客或代码示例?

Q2。这是一个关于在多生产者环境中的通用问题,一个生产者结果将如何与环形缓冲区中先前生产者的结果相互关联。

例如:Is Disruptor 可以在多个生产者更新单个文件/变量的环境中使用。即有两个生产者(P1,P2),它们正在更新一个共享变量(命名为“count”)。(这里的count是ValueEvent类中的一个实例变量)

最初,“计数”值为 0。

生产者 P1 会将“计数”当前值加 1。所以生产者 P1 处理后,count 的值将是 (0+1) = 1。

生产者 P2 会将“count”当前值加 2,因此生产者 P2 处理后,count 的值将是 (1+2) = 3。

基本上,P2 需要从环形缓冲区读取更新的“计数”值(由 P1 完成)并添加增量值(2)。

我们如何维护生产者的执行顺序?(P2总是在P1执行之后执行。)

在消费者端,消费者 (C1,C2) 将按顺序读取“计数”值 (1,3,.,.,.)。这没关系,就像在环形缓冲区中一样,每个消费者将仅按顺序读取环形缓冲区值。

谢谢,普拉森吉特。

4

2 回答 2

0

q1:没有示例 - 但假设您使用的是 Java 实现,如果您想要多个真正独立的生产者,则需要使用 ProducerBarrier。

q2:但是您的 Q2 告诉我,您的颠覆者中还没有完全独立的制作人。由于存在依赖关系 P1 然后 P2 然后 {C1,C2}。想想 P2 是一个“消费者”,它更新了一个不同的变量(不是 P1 更新的同一个变量),C1&C2 跟随 P2。

例如:P1 确实 count=0+1。P2 确实 count2=1+2=3。C1&C2 读取“count2”变量。然后将您的干扰器设置为具有 P1->P2->{C1,C2}。在 P1 完成之前,P2 不会开始处理。在 P2 完成之前,C1 和 C2 不会开始处理。

如果您追求最佳性能,则必须注意两个计数器之间的缓存行共享。

于 2012-05-23T12:47:40.960 回答
0
  1. 我编写了一个示例项目来说明多个生产者 - 单个消费者。这是链接: http: //krishnansrinivasan.wordpress.com/2012/07/29/using-disruptor-net-with-wcf-2/

  2. 生产者永远不会更新由 RingBuffer 抽象出来的变量的状态。Ringbuffer 仅有助于根据从生产者接收消息的顺序对消费者的调用进行严格排序。

于 2012-07-31T18:05:02.897 回答