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

为何性能测试中Python函数运行速度比C++实现更快?

性能差异核心原因

你的测试用例存在严重的逻辑不对等问题,两个版本执行的计算量、底层实现逻辑完全不在一个维度,和Python迭代器机制没有任何关系,具体原因如下:

  • 你的Python代码根本没有执行1亿次逐元素循环
    你写的for i in [x]逻辑中,[x]是长度仅为1的列表,唯一的元素是整个numpy数组对象x的引用,整个循环只运行1次,完全没有逐元素遍历数组的开销,和C++版本里写的1亿次for循环逻辑完全不对等。
  • Python版本的乘法是C层面的优化实现,不是Python代码执行的
    循环里的i *= a本质是调用numpy数组的原地广播乘法接口,这个接口是提前用C编写、做过极致向量化优化、可直接调用CPU SIMD指令的高性能实现,运行时根本不需要Python解释器逐句调度循环,性能和开了最高优化的C++代码属于同一水平。
  • 你的C版本大概率没开编译优化
    如果你是直接用默认参数编译C
    代码(比如g++不加任何优化参数),生成的是无优化的Debug版本机器码,不会做自动向量化、循环展开、指令并行调度等优化,只能逐次执行内存读取、乘法、内存写入的基础指令,1亿次操作跑出200ms是正常水平。
修正后的对等测试说明

如果要做公平的性能对比,需要保证两边逻辑、数据类型、优化等级完全对齐:

  1. 纯Python逐元素循环版本(和无优化C++逻辑完全一致):
    这个版本用Python层面的循环逐元素访问数组做乘法,代码如下:
    import time
    import numpy as np
    
    def mult(arr, b):
        for i in range(len(arr)):
            arr[i] *= b
    
    # 和C++版本对齐,用4字节int类型,长度1亿
    x = np.random.randint(0, 100, size=100000000, dtype=np.int32)
    start = time.time()
    mult(x, 5)
    print(f"耗时: {(time.time() - start)*1000} ms")
    
    这个版本运行耗时通常在10秒以上,比无优化C++慢数十倍,符合Python原生循环的普遍性能表现。
  2. 开启最高优化的C++版本:
    编译时加上优化参数g++ test.cpp -O3 -march=native -o test,编译器会自动对循环做SIMD向量化、循环展开优化,实际运行耗时会降到50-70ms区间,和numpy的性能基本持平甚至更快。

补充说明:你之前猜测的「Python迭代器机制带来性能提升」完全不成立,纯Python层面的循环(无论是否用迭代器)性能远低于C++是行业共识,这次测试结果异常纯粹是测试代码逻辑写错导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:21:38