关于 vertx 的 Event Loop 和 Work Pool 资源分配问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
layxy
0.66D
V2EX    程序员

关于 vertx 的 Event Loop 和 Work Pool 资源分配问题

  •  
  •   layxy 2023-11-21 09:21:42 +08:00 1497 次点击
    这是一个创建于 695 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了官方文档,Event Loop 用于处理非阻塞或者短耗时场景,查了资源推荐 Event Loop 数量和 cpu 核心数量保持一致,那 Event Loop 占用了所有 cpu 资源,还能再创建 Work Pool 吗,如果创建 work pool 执行了阻塞逻辑或密级计算型任务,会不会影响 event loop

    7 条回复    2023-11-22 09:17:38 +08:00
    afeiche
        1
    afeiche  
       2023-11-21 09:24:36 +08:00
    会啊,毕竟他这个还是系统的线程,依赖于操作系统的调度,要不就是根据 cpu 的核数合理的分配线程数,要不就把 work verticle 分开部署
    pigspy
        2
    pigspy  
       2023-11-21 09:31:44 +08:00
    1 ,Event Loop 占用了所有 cpu 资源,还能再创建 Work Pool 吗?
    当然可以
    2,如果创建 work pool 执行了阻塞逻辑或密级计算型任务,会不会影响 event loop ?
    会影响
    Goooooos
        3
    Goooooos  
       2023-11-21 10:20:10 +08:00
    你可能对线程的概念不太了解,可以看看操作系统相关原理
    nothingistrue
        4
    nothingistrue  
       2023-11-21 10:24:41 +08:00
    vertx 基于 netty ,Event Loop 跟 Work Pool 都是 Netty 的架构概念。

    Event Loop 跟 Work Pool 都是 Netty 的启动项,启动时候就建好的,不存在「再创建」。Work Pool 内部再由 ChanleHandle 组成 Pipeline 。至于来得消息咋处理的,就看你 Pipeline 怎么组了。

    Event Loop 全权负责 TCP 连接的 IO ,但也仅仅负责这些,它不负责最终处理,而是将其转给 Work Pool 。所以 Event Loop 基本不可能占用太多的 CPU 资源(楼主这里可能需要再补充一下线程的知识)。Event Loop 数量和 cpu 核心数量保持一致,我没见过这个推荐,实际上可能就是随口一说。这玩意大多数情况下,开一个就够了,它应该是最大数量没必要超过 cpu 核心数量。

    Work Pool 是否会阻塞,取决于 Pipeline 怎么设计。如果是全同步的 Pipeline ,那么 Work Pool 就是阻塞的。如果这时候再执行长时任务,那么系统的并发量,就被限制成了 Work Pool 的个数。Work Pool 阻塞的时候,技术层面上讲 Event Loop 并没有阻塞。但是,因为 Event Loop 无法再往 Work Pool 送数据了,它实际层面上被阻塞了。如果 Pipeline 中间有任何一个 ChanleHandle 是异步的,那么 Work Pool 就是非阻塞的,这时候全程非阻塞。
    cloud107202
        5
    cloud107202  
       2023-11-21 10:39:48 +08:00
    > 那 Event Loop 占用了所有 cpu 资源
    不会,cpu 会给线程分配时间片,不存在某线程完全占用某个核心

    eventloop threadpool 线程数量 <= core size 是因为超过了没有意义,受到并行限制


    > 如果创建 work pool 执行了阻塞逻辑或密级计算型任务,会不会影响 event loop
    粗略的讲,也不会。阻塞任务不占用 cpu 时间片,比如用 jstack 等工具去观察线程的状态机,等待锁是 blocked 等待定时器是 timed-waiting.

    跑密集运算场景,整体上看会对机器的 cpu 资源负载升高,但是这是可预期的正常的工作负载。反而因为密集运算跑在 work pool 的某个线程,不会干扰/拖慢 event loop 完成事件派发
    layxy
        6
    layxy  
    OP
       2023-11-22 09:17:33 +08:00
    @nothingistrue 感谢大佬解答
    layxy
        7
    layxy  
    OP
       2023-11-22 09:17:38 +08:00
    @cloud107202 感谢大佬解答
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5894 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:20 PVG 10:20 LAX 19:20 JFK 22:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86