如何保证重要进程不因为进程调度而频繁挂起? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ytterbium
V2EX    问与答

如何保证重要进程不因为进程调度而频繁挂起?

  •  
  •   ytterbium 2020-07-31 14:19:42 +08:00 via Android 1786 次点击
    这是一个创建于 1977 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体情况是,主进程负责完成主要计算任务,主进程 fork 出多个子进程,每个子进程对应一种数据类型,子进程负责产生对应类型的数据,当主进程需要某类型的数据时,通过进程间通信从对应子进程拿数据。

    每个子进程每次只产生一个单位数据放入队列,随后进入 idle 状态,直到数据被主进程拿走,再产生新数据。主进程处理一单位数据所需时间约是子进程产生一单位数据的 4 分之一,但是数据类型多,且不会连续取最近 3 次取过的类型的数据。

    希望达到的效果是主进程除了少量时间花在进程间通信上,几乎不停断地处理数据。目前遇到的问题是由于子进程较多,负载过高,主进程频繁被调度,不能持续运行。目前是设置子进程 nice 为最低优先级,但是没有效果。服务器 40 CPUs,1 主进程,400+子进程。
    5 条回复    2020-08-01 13:10:27 +08:00
    yidinghe
        1
    yidinghe  
       2020-07-31 15:33:22 +08:00 via Android   1
    我能想到的就是分配指定一个 CPU 给主进程,子进程不得使用该 CPU 。
    sariya
        2
    sariya  
       2020-07-31 21:24:38 +08:00 via Android   1
    没这么搞的吧…子进程进入 idle 时是不是可以转去生成其他类型数据,把进程数降下来
    ytterbium
        3
    ytterbium  
    OP
       2020-07-31 22:53:18 +08:00 via Android
    @yidinghe 查了一下,python 的 psutil.cpu_affinity 可以指定 cpu,接下来试一试,谢谢你的建议


    @sariya 进程数不重要,毕竟绝大多数子进程都是挂起的,只要有子进程请求 cpu 时间,主进程就可能被中断
    sariya
        4
    sariya  
       2020-08-01 10:39:53 +08:00 via Android
    你的主进程一次取走 100 子进程的数据,那么接下来就有 100 进程等着和主进程抢 cpu 。除了 1 楼说的设置亲和度之外,何不把子进程数量降到 cpu 核心数,每个子进程依次产出多个类型,主进程还能一次打包带走,不降进程数是有什么特殊需要吗
    ytterbium
        5
    ytterbium  
    OP
       2020-08-01 13:10:27 +08:00 via Android
    @sariya 实际上是有多个主进程,每个主进程处理不同大类的数据,每个主进程有多个子进程产生大类下的小类,多个主进程处理一定数据量后会同步一次产生最终输出,主题里我简化了问题,进程数很难降低到 cpu 核心数以下。如果是每个子进程产生多个数据类型会出现主进程等待子进程的情况,比如子进程依次产生 1 ~ 100 号类型的数据,主进程速度快,已拿走的 100 个处理完后,子进程还没产生完,这时候请求 90 号数据,子进程还没产生,主进程就要等了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5686 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 06:31 PVG 14:31 LAX 22:31 JFK 01:31
    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