phpy 压力测试(第二轮),性能比原生 Python 高 14% 和 25%

第一次压测发现基于 phpy 写的 PHP 代码比 Python 原生代码性能差了 50% ,经过排查发现是使用了 Debug 版本的 PHP ,第二轮测试改为使用 PHP Release 版本,性能反而还比原生 Python 高了 14% (写字典) 和 25% (读字典)。

另外经过测试发现在 PHP-FPM 环境下 import Python 包,仅第一次消耗比较多的时间,第二次直接使用了 Python sys.modules 中缓存的包,因此 phpy 是完全可以用于 PHP-FPMApache 等短生命周期环境下的。

压力测试

压测脚本中创建了一个 PyDict ,分别读写 PHP 代码和 Python 代码执行 1000万次

  • PHP 版本PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)
  • Python 版本Python 3.11.5
  • 操作系统:Ubuntu 20.04
  • GCC 版本gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
请注意设需要构造一个 1000 万个元素的 HashTable,需要至少 2G 以上内存空间才可以运行此测试

PHP

Python

import time

my_dict = {}
COUNT = 10000000

n = COUNT
start_time = time.time()


for i in range(n):
    my_dict["key-" + str(i)] = i * 3

elapsed_time = time.time() - start_time

print(f"dict set: {elapsed_time:.6f} seconds")

n = COUNT

total = 0
start_time_get = time.time()
for i in range(n):
    total += my_dict["key-" + str(i)]

elapsed_time_get = time.time() - start_time_get

print(f"dict get: {elapsed_time_get:.6f} seconds")

PHP 数组

结果对比

(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php 
dict set: 4.663758 seconds
dict get: 3.980076 seconds
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php 
array set: 1.578963 seconds
array get: 0.831129 seconds
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py 
dict set: 5.321664 seconds
dict get: 4.969081 seconds
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$

Python 测试为基准:

脚本名称 Set Get
dict.php 114% 125%
array.php 337% 599%
  • phpyPHP 代码写入 PyDict 的性能比原生 Python14%,读取性能高 25%
  • PHP 写入 PHP Array 的性能比 Python 写入 Dict237%,读取高出了近 500%

你可能感兴趣的:(phppython)