可以将其视为I / O绑定任务吗?

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

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

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

评论
炸了SM
炸了SM
这3个线程是否会进入睡眠状态,而3个子进程却在紧缩数字并占据3个核心,然后让最后一个核心闲置?

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

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

It sounds like your problem is well suited for multiprocessing.Pool. In that case note that if you don't specify the number of processes to use, it uses the number of CPU cores by default:

processes is the number of worker processes to use. If processes is None then the number returned by os.cpu_count() is used.

这是一个正式信号,表明使用与内核一样多的进程是一种正常做法。

点赞
评论