我有一些非常占用大量CPU的PHP脚本,在数百个并发用户中处理数百万次计算。
我正试图找到一种方法来加速PHP变量赋值的内部,并循环序列与C。
虽然PHP显然是松散类型的,但有没有任何方式/扩展来专门分配类型(assign, not 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);
}
非常不言自明 - 它循环1亿次,每次迭代乘以约590亿的任意数,将其分配给变量并打印出来。
在我的Macbook上,编译并运行它会产生:
lees-macbook-pro:Desktop lee$ time ./test2
x is 5932840864471590762
real 0m0.266s
user 0m0.253s
sys 0m0.002s
相当快!
PHP 5.3 CLI中的类似脚本...
<?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
超过22秒vs 0.2!
我意识到PHP比这个简单的C程序在幕后做得更多 - 但是有没有办法让PHP内部在原始类型和循环上表现得更“原生”?
答案 0 :(得分:4)
简短的回答是否定的,不可能以您想要的方式加速PHP代码。优化代码几乎肯定更好,因此您不必首先进行如此繁重的数值运算。
答案很长,如果你决定以艰难(不明智的方式)做事,你可以做两件事。
答案 1 :(得分:1)
这是动态语言的权衡。它们比C / C ++慢很多,你无法做任何事情。这不仅限于PHP。例如,Ruby或Javascript也存在同样的问题。
在处理PHP中的复杂代码时,您可以进行大量优化,但这些非常简单的循环不会更快。
有些项目尝试构建一个使用PHP代码生成本机二进制文件的编译器(如Facebook“HipHop”http://developers.facebook.com/news.php?story=358&blog=1),但它们仍在开发中。
答案 2 :(得分:0)
也许这可能让您感兴趣:http://developers.facebook.com/news.php?story=358&blog=1
他们开发了将PHP转换为本机代码的编译器。应该有助于你的情况。
此项目托管在github上:http://wiki.github.com/facebook/hiphop-php/