You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ThreadPoolExecutor处理CPU密集型任务为何远超预期速度?

为什么ThreadPoolExecutor处理你的任务能大幅提速?

你对GIL的认知没错:纯CPU密集型任务用ThreadPoolExecutor无法获得多核并行优势,因为同一时间只有一个线程能执行Python字节码。但你的测试代码里的cpu_slow_function并不是真正的纯CPU密集任务——问题出在循环里的time.time()调用。

核心原因:

  • time.time()是系统调用,Python在执行这类C实现的外部操作时,会主动释放GIL
  • 当一个线程调用time.time()等待系统返回结果时,其他线程可以立即获取GIL并执行自身的任务
  • 你的循环逻辑是不断调用time.time()来判断是否继续,这会频繁触发GIL的释放与线程切换,让多个线程实际上能并行推进,所以总耗时远低于串行执行的50秒

验证真正的CPU密集任务

如果要测试纯CPU密集场景,把循环改成不依赖系统调用的纯计算,比如:

@measure_execution_time
def pure_cpu_function(item):
    counter = 0
    # 固定次数的纯运算循环,无系统调用
    for _ in range(10**7):
        counter += 1
    return item, counter

用这个函数测试的话,ThreadPoolExecutor的总耗时会和串行执行差不多,而ProcessPoolExecutor才能利用多核CPU真正缩短耗时。

内容的提问来源于stack exchange,提问作者JaviOverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:35:02