Nie*_*els -2 php c++ performance boost
我在PHP和带有Boost的C ++中都具有以下实现。它只是将文件读取为字符串,将其用空格分隔(我希望能够选择此字符),然后在具有20万个以空格分隔的随机数(称为“空格”)的文件上运行:
在PHP中:
<?php
$a = explode(" ", file_get_contents("spaces"));
echo "Count: ".count($a)."\n";
foreach ($a as $b) {
echo $b."\n";
}
Run Code Online (Sandbox Code Playgroud)
在C ++中:
#include <boost/algorithm/string.hpp>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdio.h>
using namespace boost;
using namespace std;
int main(int argc, char* argv[])
{
// ifstream ifs("spaces");
// string s ((istreambuf_iterator<char>(ifs)), (istreambuf_iterator<char>()));
char * buffer = 0;
long length;
string filename = "spaces";
FILE * f = fopen (filename.c_str(), "rb");
if (f)
{
fseek (f, 0, SEEK_END);
length = ftell (f);
fseek (f, 0, SEEK_SET);
buffer = (char*) malloc (length);
if (buffer)
{
size_t t = fread (buffer, 1, length, f);
}
fclose (f);
}
string s(buffer, 0, length);
vector <string> v;
split(v, s, is_any_of(" "));
cout << "Count: " << v.size() << endl;
for (int i = 0; i < v.size(); i++) {
cout << v[i] << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我用g ++ split.cpp -O2 -o split编译了它,并且在我的系统上持续运行它需要4.5秒,而PHP7则需要4.2秒。PHP如何比C ++快8%?
尽管您的问题非常具体,但我会给出一个较为笼统的答案,可能在这里很合适。
高级语言往往是由非常聪明和有能力的程序员编写的。他们非常熟悉所使用的工具,并且能够为常见情况找到出色的解决方案,大多数情况下,这些解决方案的性能要优于普通程序员编写的某些代码。因此,即使在汇编中,与常见场景匹配的PHP代码也可以胜过错误的实现。
JIT的可能效果(及时编译)
我将明确指出,这里不是这种情况,因为PHP7不支持JIT编译,但是这是一个非常有趣的情况,可能与任何认为解释语言总是较慢的程序员有关。
某些解释语言使用称为JIT(即时编译)的功能。这允许在运行时将高级代码动态转换为机器代码。
由于此过程是在运行时完成的,因此编译器会知道确切的CPU,从而使其能够为任务选择最合适的机器代码。
由于诸如C和C ++之类的语言通常是为更广泛的CPU选择而编译的,因此它们的代码可能不如JIT编译器创建的代码那样优化。
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |