这可以看作是受I / O约束的任务吗?

问题描述 投票:0回答:1

假设您的计算机上有4个物理核心,并且假设没有超线程,并且python版本为3.2+(尽管我不确定这些额外信息是否对我的问题很重要)。

如果我要打开一个包含3个子进程的池,因此每个子进程在执行一些CPU绑定的任务时都占用一个物理核心,并且如果我要从当前进程中打开3个线程(占用4个剩余的核心),则操作系统正在运行,并且如果我要将CPU绑定的任务向下发送到3个子进程中的每个子进程,那么问题是这样的:

从当前正在管理线程的进程的角度来看(这些线程正在将任务推送到每个子进程,并正在等待结果从这些子进程返回),可以将这些受CPU约束的任务视为I / O。绑定的任务(从当前过程的角度来看),因为当前过程实际上没有做任何工作?同样,这3个线程是否会进入睡眠状态,而3个子进程正在紧缩数字并占用3个核心,而让最后一个核心闲置呢?

multithreading io multiprocessing cpu
1个回答
1
投票
[3个线程是否会进入睡眠状态,而3个子进程正在处理这些数字并占据3个核心,然后让最后一个核心闲置?

是。我无法想象还会发生什么,您是否还有其他可能性?如您所说,线程正在等待。

在这种情况下,您可能可以使4个进程处理CPU绑定的任务。

听起来您的问题很适合multiprocessing.Pool。在这种情况下,请注意,如果您未指定要使用的进程数,则默认情况下它将使用CPU内核数:

processes是要使用的工作进程数。如果进程multiprocessing.Pool,则使用None返回的数字。

这是正常的做法,即使用与内核一样多的进程是正常的做法。
© www.soinside.com 2019 - 2024. All rights reserved.