并发框架Disruptor译文
(感谢同事 方腾飞 投递本文)
Martin Fowler在自己网站上写了一篇 LMAX架构 的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。
Disruptor它是一个开源的并发框架,并获得 2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。本文是 Disruptor官网 中发布的文章的译文( 现在被移到了GitHub )。
剖析Disruptor:为什么会这么快
Disruptor如何工作和使用
Disruptor的应用
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《 并发框架Disruptor译文 》的相关评论
java的啊 :(
内存运算每秒600万次这不算啥。关键Java是IO,不论用同步IO,NIO,还是NIO.2,哪怕一次只读写1字节,每秒都只能处理十万次请求这个数量级。
我想了一下,我觉得每秒600万次请求的网络服务还是有可能的,但要求请求很小,多个请求合并在一个IP包中,就可以减少IO次数了。
如果用于网络游戏的话,这种服务器只能是后台的逻辑服务器,不能直接面对客户端连接。
应该学lwn搞个one big page, 方便send to kindle/ pocket之类的。。
牛叉
看了一下,这个框架之所以高性能主要是因为能有效的解锁,避免了伪共享,我很好奇一点,他是如何针对具体的处理器而变化的呢?是使用在所有架构的处理器上么?
要高效使用多核心的CPU,不可能完全无锁吧。锁用的少还是可以理解的。
test
大概看了一下,可以理解为两个东西
1. 在线程级别的Actor并发,姑且不论好有无必要;并发实体从Process简化为Thread又从Thread变成Actor。。难道说并发实体真的是越小越好?这不科学吧。
2. 无锁的生产消费队列,没啥好说的,到处是这些东西。这个framework似乎用它来做消息的承载。
哪儿有demo可以看看
【这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单】
什么配置的硬件平台?1笔订单需要做哪些事情?
这个机制很复杂吗?需要一个框架来实现?
如真的有效,应该有c或c++的实现例子吧?操作系统会把它利用起来(彻底抛弃锁)吗?
该代码在4×4核Xeon E7520 1.87G上测试,16线程加padding和不加padding性能差别是2.9倍左右,远没有图示数据那么夸张;另外用C/C++写的测试代码也是类似结果(差距更小一些),详见 http://www.felix021.com/blog/read.php?2106 。我怀疑是共享的L2/L3 Cache导致Cache Line失效的开销显著降低了。
p.s. 我指的是伪共享那篇的Java代码
10人都给5分,曲高和寡。
深傲点的技术文章没啥人看, 扯淡的文章回复率会很高,浮躁啊
@felix021
我用笔记本跑了一下, I5-3210MCPU ,双核4线程。4线程加padding成绩是8209617297
,不加是29167167375,差距大概3.5倍。
@hongzy
嗯,差不多,原文那个太夸张了。而且我觉得这个东西的性能,真的有那么重要吗,真实系统中瓶颈往往在数据库、IO上面。
@hongzy 不仅仅是padding的优化。
@Ritchie_E
只能针对主流处理器。
@felix021
对于它们来说数据库,IO已经不再是瓶颈了,而是在进行极致的优化,Disruptor针对处理器进行优化的。
@helloworld
直接去github下载源码吧
@felix021 亲自测测非常好。
@hongzy
呵呵 你说的很对啊,这可能也是为什么并发编程网流量上不去的原因。
大概看了一遍
有个问题不是很理解
多个线程读取 Ringbuffer 的话怎么保证线程读取到的不是重复的数据
按我以前的做法,是维护一个读索引,做原子自增操作
但是文章上说Ringbuffer只维护一个写索引。。。
望指教
这个可以做高频交易吗?
@麦兜不卖兜
代码中有个WorkPool的类,结合WorkProcessor和WorkHandler来解决这个问题
http://ifeve.com/的連結都死了
@corns
已经恢复
有个疑问呢,希望大家能够帮忙解决一下,文章说的是在cpu是多核情况下的伪共享会有优化,如果是单核的呢,会不会在伪共享的优化上边就没有意义了?
Hi, Neat post. There is an issue with your web site in web explorer, may test this? IE nonetheless is the marketplace chief and a big part of folks will omit your fantastic writing due to this problem.
@流浪的铺盖
单核也是有意义的。
大家好,我最近阅读了Disruptor的大部分源码,重点集中于 事件发布、事件处理的源码,做了个笔记: http://coderbee.net/index.php/open-source/20130812/400 ,希望能对大家有点帮助。