性能明智...... exec(c ++)还是直接的PHP?

时间:2011-05-10 01:19:30

标签: php c++ performance

想知道mysql打开,选择和数据的通用输出会更快:

A)编译的C ++代码,通过exec()(或等效的东西)调用

B)直接的PHP代码。

鉴于所有代码都在C ++和PHP中均等编码。

做了一个测试: 这是C ++

Document Length:        100000 bytes
Concurrency Level:      2
Time taken for tests:   0.139 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      1001550 bytes
HTML transferred:       1000000 bytes
Requests per second:    71.76 [#/sec] (mean)
Time per request:       27.872 [ms] (mean)
Time per request:       13.936 [ms] (mean, across all concurrent requests)
Transfer rate:          7018.29 [Kbytes/sec] received

这是PHP:

Concurrency Level:      2
Time taken for tests:   4.115 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      1001550 bytes
HTML transferred:       1000000 bytes
Requests per second:    2.43 [#/sec] (mean)
Time per request:       822.924 [ms] (mean)
Time per request:       411.462 [ms] (mean, across all concurrent requests)
Transfer rate:          237.71 [Kbytes/sec] received

以下是程序(我没有包含MySql代码 - 只是想看看基本代码是否更快地创建堆栈)。

C ++

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    stringstream x;
    //string x;
    for (int i = 0; i < 100000; ++i)
    {
        x << "X";
    }

    cout << x.str();
    return 0;
}

这是PHP:

for ($i=0; $i<100000; ++$i)
{
    $x = $x . "X";
}

echo $x;

不知道使用stringsteam进行公平的测试......想法?我的想法是,无论新的堆栈实例和mysql连接如何,C ++都会更快。

编辑:

经过测试:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    //stringstream x;
    string x;
    for (int i = 0; i < 100000; ++i)
    {
        x = x + "X";
    }

    cout << x;
    return 0;
}

而且,还是更快!

Concurrency Level:      2
Time taken for tests:   0.115 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      1740 bytes
HTML transferred:       0 bytes
Requests per second:    86.98 [#/sec] (mean)
Time per request:       22.994 [ms] (mean)
Time per request:       11.497 [ms] (mean, across all concurrent requests)
Transfer rate:          14.78 [Kbytes/sec] received

编辑:

这是调用C ++文件的php程序

<?php

echo exec("./test");

3 个答案:

答案 0 :(得分:6)

让我们看看。让我们启动一个shell,传递一些参数,这会启动另一个应用程序,它会加载一系列.so库,然后连接到mysql,做东西,然后必须通过printf()返回一个潜在的巨大输出块或者等价,然后必须反馈给PHP,解析为纯文本,撕裂,然后变成某种连贯的结构。

这比在MySQL中进行查询并将数据直接导入PHP结构更快?

也许你应该测试一下......

答案 1 :(得分:0)

除非你每秒处理数百次读/写,否则差异很可能几乎可以忽略不计,如果存在的话。

答案 2 :(得分:0)

如果你在PHP扩展中修补你的compliled C ++代码,那么它是有意义的。但除非您使用C / C ++对结果数据进行重要计算,否则它并不比执行PHP脚本代码快。

如果您优化/非规范化数据库方案,或者异步使用查询,则更有可能看到性能提升(在脚本启动时发出mysql_query,执行其他操作,当mysqld服务器有几毫秒时只发出mysql_fetch_assoc准备结果集。)