Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multiprocessing 创建过多的流程是否会对性能产生负面影响?_Multiprocessing - Fatal编程技术网

Multiprocessing 创建过多的流程是否会对性能产生负面影响?

Multiprocessing 创建过多的流程是否会对性能产生负面影响?,multiprocessing,Multiprocessing,我理解创建多个进程可能不会带来任何好处,这取决于处理器拥有多少内核(如果任务是CPU绑定的),或者取决于您可以同时执行多少IO操作(如果任务是IO绑定的)。在这种情况下,创建太多的进程根本没有效果 但是,创建过多的流程是否会对性能产生负面影响?如果是,为什么?简短回答:是 不活动的进程在内存和CPU时间方面有一些开销——不是很多,但不是没有。因此,如果你有一个非常多的进程,你会看到负面影响 在现代系统中,同一可执行文件的多个进程将共享代码和只读数据,但每个进程都需要自己的可变数据副本,每个进程都

我理解创建多个进程可能不会带来任何好处,这取决于处理器拥有多少内核(如果任务是CPU绑定的),或者取决于您可以同时执行多少IO操作(如果任务是IO绑定的)。在这种情况下,创建太多的进程根本没有效果

但是,创建过多的流程是否会对性能产生负面影响?如果是,为什么?

简短回答:是

不活动的进程在内存和CPU时间方面有一些开销——不是很多,但不是没有。因此,如果你有一个非常多的进程,你会看到负面影响

在现代系统中,同一可执行文件的多个进程将共享代码和只读数据,但每个进程都需要自己的可变数据副本,每个进程都需要自己的堆栈,等等。因此,每个附加进程都会占用一些内存;这意味着更大的缓存压力,在极端情况下,更大的交换文件活动或完全耗尽内存。进程的数量也可能有一个硬限制

操作系统进程调度器在处理更长的进程列表时会有更多的开销(虽然这可能不会是线性的;如果是基于堆的,则可能是O(logn))

实际上,缓存压力可能是最大的因素。假设您的流程都在处理类似的工作负载。他们在处理过程中需要的一些数据将在多个工作单元之间共享,而在编译时不知道这些数据;每个进程都会有自己的数据副本。因此,由两个进程处理的两个工作单元将为此类数据占用两倍的缓存空间