Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环/分配与C相比,什么在减慢?_Php_Optimization - Fatal编程技术网

Php 循环/分配与C相比,什么在减慢?

Php 循环/分配与C相比,什么在减慢?,php,optimization,Php,Optimization,我收集了大量的PHP脚本,这些脚本占用了大量的CPU资源,可以同时处理数百个用户的数百万次计算 我试图找到一种方法来加速PHP变量赋值和循环序列与C的内部过程 虽然PHP显然是松散类型的,但有没有任何方法/扩展专门指定类型assign而不是cast,这在C风格的方式中似乎更昂贵 这就是我的意思 这是C语言中的一些伪代码: #include <stdio.h> int main() { unsigned long add=0; for(unsigned long x=0;x<

我收集了大量的PHP脚本,这些脚本占用了大量的CPU资源,可以同时处理数百个用户的数百万次计算

我试图找到一种方法来加速PHP变量赋值和循环序列与C的内部过程

虽然PHP显然是松散类型的,但有没有任何方法/扩展专门指定类型assign而不是cast,这在C风格的方式中似乎更昂贵

这就是我的意思

这是C语言中的一些伪代码:

#include <stdio.h>

int main() {
unsigned long add=0;

for(unsigned long x=0;x<100000000;x++) {
    add = x*59328409238;
}
printf("x is %ld\n",add);
相当快

PHP5.3 CLI中的类似脚本

<?php
for($i=0;$i<100000000;$i++){
    $a=$i*59328409238;
}
echo $a."\n";
?>
超过22秒对0.2秒


我意识到PHP在幕后做的比这个简单的C程序多得多,但是有没有办法让PHP内部在基本类型和循环上表现得更“自然”?

这是动态语言的折衷。它们比C/C++慢得多,你对此无能为力。这不仅限于PHP。例如,Ruby或Javascript也有同样的问题

在PHP中处理复杂代码时,可以进行大量优化,但这些非常简单的循环不会更快


有一些项目试图构建一个编译器,从PHP代码(如Facebooks HipHop)生成本机二进制文件,但它们仍在开发中。

简短的回答是不,不可能以您希望的方式加速PHP代码。几乎可以肯定,优化您的代码会更好,这样您就不必首先进行如此繁重的数值运算

长话短说的答案是,如果你决定以不明智的方式做事情,你可以做两件事

您可以用C编写代码作为PHP的扩展。 你可以用像
也许你会对此感兴趣:

他们开发了将PHP转换为本机代码的编译器。应该对你的案子有帮助


该项目位于github上:

您是否需要对算法进行一些优化?例如,从数百万次计算到数十万次计算?我没有充分解释算法/要求,主要是因为这对主题来说太过分了,但事实上,这是数万用户在100000+范围内同时进行的许多计算。。。我编写上述代码是为了模拟10000000000个连续循环,用任意数字乘以以简化示例,并证明我关于速度差异的观点,这并不意味着我还没有考虑减少计算量。。。虽然我同意这通常是一条适用于任何项目的非常好的编码建议。类型推断编译器可以使它们与C一样快,但PHP还没有。Daniel,很好的调用,这正是我所要问的——是否有任何方法可以编译类型,这样就不会花费解释器1亿次的时间。似乎是未来PHP版本的一大焦点!关于HipHop的说明-我将上面的内容编译成HipHop,只略微提高了性能。。。它仍然在13秒以上的范围内。从上面复制-关于HipHop的说明-我将上面的内容编译成HipHop,这只稍微提高了性能。。。它仍然在13秒以上的范围内
<?php
for($i=0;$i<100000000;$i++){
    $a=$i*59328409238;
}
echo $a."\n";
?>
lees-macbook-pro:Desktop lee$ time /Applications/XAMPP/xamppfiles/bin/php test3.php
5.93284086447E+18

real    0m22.837s
user    0m22.110s
sys  0m0.078s