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

为何双核心运行两进程比单核心更慢?Python/PHP与C表现差异解析

Python/PHP与C语言多核心CPU密集任务的性能差异解析

实验现象

Python测试结果

  • 单进程单核心运行:耗时约7秒
  • 双进程绑定同一核心运行:每个进程耗时14-15秒(符合上下文切换导致总耗时翻倍的预期)
  • 双进程绑定不同核心运行:每个进程耗时15-17秒(未实现并行加速,耗时接近单核心双进程场景)

C语言测试结果

  • 单进程单核心运行:耗时约6秒
  • 双进程绑定同一核心运行:每个进程耗时12秒
  • 双进程绑定不同核心运行:每个进程耗时约6秒(符合并行加速预期)

补充测试

在M1 Mac Docker容器(4核心)、AWS t3.medium虚拟机(2 vCPU)中重复测试,结果一致;PHP环境下也出现与Python相同的异常表现。

核心原因

1. 解释型语言的内存管理与缓存失效

Python(CPython)和PHP都属于解释型语言,变量模型与内存管理机制远复杂于C:

  • Python的int是对象类型,累加操作涉及引用计数更新、对象内存操作,而非C语言中直接在寄存器/私有缓存中完成的原生整型运算
  • 当两个Python/PHP进程在不同核心同时运行时,频繁的内存读写会触发缓存颠簸(Cache Thrashing):每个核心的私有缓存(L1/L2)会被另一个进程的内存操作频繁冲刷,导致进程需要反复从主存加载数据,大幅增加执行耗时

2. 全局锁的间接影响

  • CPython的全局解释器锁(GIL)限制单进程内多线程并行,但本次测试是多进程,GIL并非直接原因。不过GIL设计下的内存管理逻辑(如引用计数的线程安全处理),进一步增加了内存操作开销,加剧了缓存失效的影响
  • PHP的Zend引擎存在类似全局锁机制,同样会提升内存操作开销,导致多核心并行时性能下降

3. 单核心与双核心场景的差异

单核心运行双进程时,进程交替执行,同一时间只有一个进程操作内存,缓存不会被频繁干扰,总耗时接近单进程的两倍;而双核心并行时,内存竞争导致缓存失效,每个进程的实际执行效率大幅降低,最终耗时与单核心双进程场景持平甚至更长

附测试代码

Python测试代码

import time

start = time.time()
j = 0

for i in range(0, 80000000):
    j += i

elapsed = time.time() - start
print("\nElapsed: %f" % elapsed)

C语言测试代码

#include <stdio.h>
#include <time.h>
    
int main() {
    time_t t;
    double elapsed;
    int i, j = 0;
    t = time(NULL);
    
    for (i = 0; i <= 2000000000; i++) {
        j += i;
    }
    
    t = time(NULL) - t;
    elapsed = ((double) t);
    printf("Elapsed: %f\n", elapsed);
    return 0;
}

测试命令

单核心双进程

taskset --cpu-list 0 time python3 cpu-bound.py & taskset --cpu-list 0 time python3 cpu-bound.py &

双核心双进程

taskset --cpu-list 0 time python3 cpu-bound.py & taskset --cpu-list 1 time python3 cpu-bound.py &

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:10:28