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

Python多线程与线性执行对比出现异常结果,求技术解释

为什么两种多线程测试的耗时差异这么大?

要搞懂这个问题,得先明确CPython的核心特性——全局解释器锁(GIL):同一时刻只有一个线程能执行Python字节码,但如果线程在执行系统级调用(比如IO操作、获取系统时间),会暂时释放GIL,让其他线程有机会运行;而纯CPU密集的Python字节码执行,只会在达到固定字节码计数或主动sleep时才会短暂释放GIL。

1. datetime循环等待的情况

你第一段代码里的循环,核心是反复调用datetime.datetime.now()获取系统时间,这是个系统级调用。每次调用这个函数时,当前线程会主动释放GIL,另一个线程就能立刻开始执行自己的等待循环。

换句话说,两个线程的等待逻辑是近乎并行运行的——多线程总耗时差不多等于单线程跑一次等待的时间,而线性执行是跑两次等待,耗时接近单线程的两倍。这就导致两者耗时差异明显,和你预期的“CPU密集型多线程耗时与线性相近”不符,因为这段代码本质是带大量GIL释放操作的等待型任务,不是纯CPU密集型。

2. 循环累加的CPU密集情况

第二段代码的循环累加是纯Python字节码运算,没有任何系统级调用。这种情况下,两个线程只能交替执行:一个线程跑一段字节码后短暂释放GIL,另一个线程再接着跑,总耗时接近单线程跑两次累加的时间,和线性执行(一次跑两倍的累加次数)的耗时基本一致,这就符合你对CPU密集型多线程的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:57:49