具体情况是,主进程负责完成主要计算任务,主进程 fork 出多个子进程,每个子进程对应一种数据类型,子进程负责产生对应类型的数据,当主进程需要某类型的数据时,通过进程间通信从对应子进程拿数据。
每个子进程每次只产生一个单位数据放入队列,随后进入 idle 状态,直到数据被主进程拿走,再产生新数据。主进程处理一单位数据所需时间约是子进程产生一单位数据的 4 分之一,但是数据类型多,且不会连续取最近 3 次取过的类型的数据。
希望达到的效果是主进程除了少量时间花在进程间通信上,几乎不停断地处理数据。目前遇到的问题是由于子进程较多,负载过高,主进程频繁被调度,不能持续运行。目前是设置子进程 nice 为最低优先级,但是没有效果。服务器 40 CPUs,1 主进程,400+子进程。
每个子进程每次只产生一个单位数据放入队列,随后进入 idle 状态,直到数据被主进程拿走,再产生新数据。主进程处理一单位数据所需时间约是子进程产生一单位数据的 4 分之一,但是数据类型多,且不会连续取最近 3 次取过的类型的数据。
希望达到的效果是主进程除了少量时间花在进程间通信上,几乎不停断地处理数据。目前遇到的问题是由于子进程较多,负载过高,主进程频繁被调度,不能持续运行。目前是设置子进程 nice 为最低优先级,但是没有效果。服务器 40 CPUs,1 主进程,400+子进程。