• 请不要在回答技术问题时复制粘贴 AI 生成的内容
HiFiwu
V2EX  ›  程序员

Disruptor 了解一下,单线程却拥有多线程无可比拟的性能

  •  
  •   HiFiwu · Aug 16, 2018 · 7550 views
    This topic created in 3006 days ago, the information mentioned may be changed or developed.

    Disruptor 了解一下,单线程却拥有多线程无可比拟的性能,原文请戳------> http://www.hchstudio.cn/article/2018/51ba/

    33 replies  •  2025-06-25 19:09:33 +08:00
    Finest
    Finest
    Aug 16, 2018
    1
    用过,在特定场景性能挺好的
    linyinma
    linyinma
    Aug 16, 2018
    2
    很显然,单核情况下,单任务性能是最高的(为什么呢?没有多任务切换带来的损失),多任务是提高 CPU 利用率,如果有任务发送阻塞,操作系统将 CPU 交个其他任务(当然调度不是这么简单,这边只是表达设计多任务的目的),假如应用设计优秀,所有调用都非阻塞,让 CPU 一直工作,显然效率是多线程无可比拟的,这也是为什么类似 NGINX 高效的原因所在;
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    3
    @hand515 是这样的
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    4
    @linyinma 本身原理比较简单
    lihongjie0209
    lihongjie0209
    Aug 16, 2018
    5
    @linyinma #2 只有在 CPU bound 的任务中你的说法才成立. IO bound 操作比如爬虫单核多线程是有用的
    iceheart
    iceheart
    Aug 16, 2018 via Android
    6
    单进程单线程 600 万订单每秒?真的假的啊?
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    7
    @iceheart 官方给的数据,没啥太大的问题
    cnmllll
    cnmllll
    Aug 16, 2018
    8
    you c/c++ 版本么
    pythonee
    pythonee
    Aug 16, 2018
    9
    适合什么场景
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    10
    @cnmllll 应该有可以去官网了解一下
    Giki
    Giki
    Aug 16, 2018❤️4
    11
    说一下 Disruptor 几个潜在的坑吧,
    1. event handler 的 wait strategy 要选好,一般用 blocking wait,要不然 cpu 消耗很大
    2. 当 ringbuffer 满了,event handler 速度跟不上,event publish 那边会空转等 ringbuffer 的空间,消耗额外 cpu
    3. 如果用 dependant event handler,他在等他依赖的 event handler 完成时也会空转,空转久了又耗 cpu 了
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    12
    @Giki 感谢提醒,遇到过其中几个,不太好排查
    coolmenu
    coolmenu
    Aug 16, 2018 via iPhone
    13
    做虚拟币交易平台可用
    wyntalgeer
    wyntalgeer
    Aug 16, 2018
    14
    请标明是 java 的,就不用浪费时间看了
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    15
    @wyntalgeer Disruptor 是一种编程思想,只不过是恰巧使用 java 实现了,您如果对语言有成见,出门右拐,不欢迎您看
    wyntalgeer
    wyntalgeer
    Aug 16, 2018❤️1
    16
    @javaCoder 如果您认为 java 仅仅是个语言,那么您玩好。我的回复明确表达了已经出门右拐的意思,您还要硬艾特进我来发表攻击性的语言,干脆丰富一些 block list
    widdy
    widdy
    Aug 16, 2018
    17
    @coolmenu 一些撮合引擎宣称百万每秒都被人批判一番,这个 600w,那不得上天!
    sugarsalt
    sugarsalt
    Aug 16, 2018
    18
    @wyntalgeer #16 哈哈,一触即跳
    aLazarus
    aLazarus
    Aug 16, 2018
    19
    感谢 16 楼,Block 了,提前预防
    jianpanxia
    jianpanxia
    Aug 16, 2018
    20
    Martin Flower 应该几年前就发过文章介绍这货了..
    innoink
    innoink
    Aug 16, 2018 via Android
    21
    这不是 n 年前就已经很成熟的技术了么
    sagaxu
    sagaxu
    Aug 16, 2018 via Android
    22
    6M 笔交易,每笔 200 字节,10G 网卡都跑满了,亩产几十万斤
    lhx2008
    lhx2008
    Aug 16, 2018 via Android
    23
    单线程 6m 次的话,光是打印控制台都来不及?
    neoblackcap
    neoblackcap
    Aug 16, 2018 via iPhone
    24
    @sagaxu 一个技术很多高频交易公司都有用,跑满 10G 网卡没什么,有 bond 嘛,文章没看,不过这个技术在特定场景的确还行。比 csp,actor 那些可能还高效些
    skylancer
    skylancer
    Aug 16, 2018
    25
    @wyntalgeer 搜了下你的帖子,全都是一些垃圾话和垃圾贴,建议你发帖前先表明本帖是垃圾帖这样我就不用浪费那几秒钟时间看你的帖了
    SimbaPeng
    SimbaPeng
    Aug 16, 2018
    26
    @wyntalgeer 浪费了我几秒钟看你的回帖,Block
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    27
    @lhx2008 在代码里面让线程睡了一会儿
    luozic
    luozic
    Aug 16, 2018
    28
    ringbuffer+系统 cpu 多久缓存架构的理解导致这货这么快。
    Wicked
    Wicked
    Aug 16, 2018 via iPhone
    29
    我写过比较粗糙的 cpp 版本,本质上还是要调好 producer 和 costumer 的平衡,因为是 ringbuffer,一旦满了就会阻塞,性能刷刷往下掉。另外也不是一个泛用的模型,只适用于特定场景。
    HiFiwu
    HiFiwu
    OP
    Aug 16, 2018
    30
    @Wicked 的确是这样的
    dbpe
    dbpe
    Aug 17, 2018
    31
    #16
    哈哈哈 没有大牛命..却有大牛病...
    aR11H34U0m5bK2ox
    aR11H34U0m5bK2ox
    Jul 20, 2024
    32
    哈哈,#16,24 年来看 18 年的破防现场,不知道 6 年过去,成为大牛没有
    HiFiwu
    HiFiwu
    OP
    Jun 25, 2025
    33
    @loyan666 没有 都快失业了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1275 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 00:58 · PVG 08:58 · LAX 16:58 · JFK 19:58
    ♥ Do have faith in what you're doing.