首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个生产者的干扰者,在那里每个人提供一个不同的依赖子图?

两个生产者的干扰者,在那里每个人提供一个不同的依赖子图?
EN

Stack Overflow用户
提问于 2015-01-03 01:58:40
回答 1查看 298关注 0票数 2

我试图找出Disruptor是否适合我的应用程序:一个相当复杂的负载生成器,用于对高性能数据库进行长时间基准测试。Disruptor模式之所以吸引人,是因为:

  • 高吞吐量
  • 低延迟
  • 没有垃圾/可预测的长时间运行行为

应用程序拓扑的简化版本如下:

C1a C1b P1 ----> C1c C1d \ C1e \ \ \ \ \ \ \ Cx / P2 --> C2a --> C2b /

=== P1 ===

P1提供的系统组件有一个生产者为多个并行用户(目前是一个Executor)提供信息。每个事件都应该被正确地处理一次,由其中一个使用者处理。排序约束是:如果A是在B之前产生的,那么A将在B之前开始执行,但是B可以先完成。

在处理一个事件之后,它将被转发到最后一个阶段,Cx。将Cx看作一个还原器/记录器:它必须按顺序处理事件,因为它所使用的数据结构并不是线程安全的。

C1a-C1e**?**问题1:使用消毒器处理的最佳方法是什么

我倾向于使用WorkerPool

=== P2 ===

P2提供的系统组件是一个简单的工作流链:一个事件由P2生成,C2a对其执行一些计算,C2b对其进行进一步的计算,最后将其转发给Cx

问题2:是否可能有一个具有两个生产者的Disruptor,其中每个生产者提供一个不同的依赖子图?

问题3:如果问题2的答案是否定的,那么是否可以在两个不同的干扰者之间共享一个消费者- Cx**,?如果是的话,如何共享?**

问题4:如果问题2和问题3的答案都是否定的,那么是否有任何方法可以使此拓扑与Disruptor一起工作?

提前感谢!

--供参考--

这不是一个解决方案,而是相关的。对于任何感兴趣的人,这个博客解释了如何创建一个半复杂的工作流,例如:

C1a --> C1b C2a --> C2b P1 --> C3a --> C3b --> Cx C4a --> C4b C5a --> C5b

EN

回答 1

Stack Overflow用户

发布于 2015-01-15 20:22:12

对于你的第一个问题,我相信WorkerPool会做到的。本质上,当每个工作人员获得自由时,它就会抓取下一个工作项。就像你说的,这不一定是按顺序完成的。然而,我从来没有在愤怒中使用过WorkerPool,所以我在这方面可能是错的。

对于第二个问题,如果您在概念上用另一个中断器(环形缓冲区)替换了Cx,并将Cx挂在后面,这是否符合您的其他要求?也就是说,将C1[a-e]所做的工作发布到另一个中断器上,并将C2b所做的工作发布到相同的干扰器中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27750989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档