请问一下,异步执行用线程池还是用 mq - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX    程序员

请问一下,异步执行用线程池还是用 mq

  •  
  •   NoKey 2024-06-03 16:36:39 +08:00 1650 次点击
    这是一个创建于 502 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想到一个情况,请教一下各位大佬。
    一个服务,内部有很多异步任务,如何确保异步任务的正确执行。
    如果采用线程池,那么为了确保不同类型的任务不会相互抢资源,就会创建很多线程池,每个类型的任务一个线程池,相同类型的任务用一个线程池自己内部竞争。
    如果采用 mq ,那么每种类型任务需要一个 topic ,然后视情况看各模块消费后是串行处理还是并行处理。
    如果采用 mq ,并且后续是并行处理,那么就是 mq 和线程池的结合。

    按照这个思路考虑下去,要给服务越来越大后,最终,是不是会尝试大量的线程池配置或者大量的 topic ,写各种消费者去消费。
    请假一下各位大佬,实际项目上,如何解决此类问题呢?谢谢
    6 条回复    2024-06-04 16:13:30 +08:00
    Ehco1996
        1
    Ehco1996  
       2024-06-03 16:43:16 +08:00
    看复杂度和需求

    mq 其实就是外存,能保证程序 crash 之后也不丢,放线程池里就是完全相反的
    kanepan19
        2
    kanepan19  
       2024-06-03 16:55:23 +08:00
    如果异步任务重要, 用个用建一个任务表,用状态去维护他。
    无论是,线程池还是 mq 都行。
    我个人觉的,不是很复杂的任务,丢线程池挺方便。 mq 拿到的任务,执行一半,重启了,还是执行失败,当然影响范围比较小。
    xinshoushanglu
        3
    xinshoushanglu  
       2024-06-03 17:20:37 +08:00
    如果 任务不能丢失,有可靠性需求,那么不能用线程池 否则服务一重启发布 就丢了。
    反之不重要的话,如果有任务队列的 控制需求,比如控制执行到一半任务 想暂停,过段时间继续,那么还得用 MQ 控制 offset 。
    如果既不在意 任务丢失,也没有中途控制需求,只需要快点跑完眼前这批任务,那直接用线程池更合适,不用引入外部依赖来增加系统复杂度
    vivisidea
        4
    vivisidea  
       2024-06-03 21:38:52 +08:00
    很多异步任务是什么量级?几千个?几万个?几十万个?

    线程池还是 mq ,我理解这两个并不是同一个角色,mq 的作用是分发任务,线程池是执行任务,或许你是想问 “是用单独的 mq 队列给 task 排队,还是用线程池内置的 blockingQueue 给 task 排队?”
    NoKey
        5
    NoKey  
    OP
       2024-06-04 14:32:39 +08:00
    @vivisidea 其实,是不是也有类似的地方,执行任务,线程池一次能排出来的线程就那么几条,如果同时要执行的任务太多,那就需要排队了
    vivisidea
        6
    vivisidea  
       2024-06-04 16:13:30 +08:00
    @NoKey 我问数据量的意思就是,如果任务数量不多,比如几千个,那每个 worker 直接从 db 查询 init 状态的任务即可,拿一条处理一条 init -> running -> finished ,没必要在其它地方再排一次队,都在 db 排队即可
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2547 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:35 PVG 18:35 LAX 03:35 JFK 06:35
    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