【发布时间】:2019-12-19 11:12:06
【问题描述】:
我的问题与this one 类似,但我正在寻找有关它如何使用的最新信息:
Python
在 Linux 上运行
在线程数多于内核数的 CPU 上。
假设一个 CPU 有 4 个核心和 8 个线程,例如,给定以下代码:
from multiprocessing.dummy import Pool as ThreadPool
from multiprocessing import Pool as ProcessPool
with ThreadPool(number_of_threads) as pool:
pool.map(some_function, some_iterable)
with ProcessPool(number_of_processes) as pool:
pool.map(some_function, some_iterable)
我想知道这些线程和进程将如何映射到 CPU 内核和线程(如果有的话)。例如:
如果 number_of_processes 为 8,每个进程可能最终都在一个 CPU 线程上吗?
如果 number_of_threads 为 8,每个线程可能最终都在一个 CPU 线程上吗?
如果 number_of_threads 远高于内核/CPU 线程数,会有什么影响?
some_function 是 IO 绑定还是 CPU 绑定对上述任何一项都有影响吗?
我总是将 ThreadPool 用于 IO 绑定,将 ProcessPool 用于 CPU 绑定。使用 ProcessPool,我发现使用与 CPU 内核相同的 number_of_processes 效果很好。但我不知道 ThreadPool 我的基准应该是什么。
【问题讨论】:
标签: python multithreading concurrency hardware