Ne C vs döngüler / atama için yavaşlama oluyor?

3 Cevap php

Ben aynı anda yüzlerce kullanıcı genelinde milyonlarca hesaplamalar hokkabazlık, son derece yoğun CPU PHP betikleri bir koleksiyona sahip.

Ben PHP değişken atama internals hızlandırmak için bir yol bulmaya çalışırken, ve C vs dizileri döngü ediyorum

PHP açıkça gevşek yazdığınız olmasına rağmen, özellikle türü atamak için herhangi bir yolu / uzantısı C tarzı moda (hatta daha pahalı görünüyor döküm, not, atamak) var mı?

İşte kastediyorum.

Bu C bazı kukla kod:

#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);

}

Kendi kendini açıklayıcı Pretty - bu, bazı 59 milyar keyfi sayısına göre 100 milyon kez, katlarını her yineleme döngüler bir değişkene ve onu yazdırır atar.

Benim Macbook, onu derleme ve çalışan üretti:

lees-macbook-pro:Desktop lee$ time ./test2
x is 5932840864471590762

real    0m0.266s
user    0m0.253s
sys  0m0.002s

Oldukça lanetlemek hızlı!

PHP 5.3 CLI benzer bir komut dosyası ...

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

Üretilen ...:

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

0.2 vs 22 saniye üzerinde!

PHP bu basit C programının daha perde arkasında çok daha fazla bir halt yaptığını fark - ama daha 'doğal' ilkel türleri ve döngüler üzerinde davranmaya PHP internals yapmak için herhangi bir yolu var mı?

3 Cevap

Kısa cevap hayır, o arzu şekilde PHP kodu hızlandırmak mümkün değildir olmasıdır. Eğer ilk etapta böyle ağır bir sayısal işlem yapmak zorunda değilsiniz böylece kodunuzu optimize etmek neredeyse kesinlikle daha iyidir.

Uzun cevabı size şeyleri sert (tedbirsiz) yolu yapmaya karar yapabileceğiniz iki şey var olmasıdır.

  • Sen C., PHP bir uzantısı olarak kodunuzu yazabilirsiniz
  • Sen gibi bir şey kullanabilirsiniz HipHop

Yani dinamik bir dil ile almak değiş tokuş. Bunlar C / C + + çok daha yavaştır ve bu konuda bir şey yapamaz. Bu PHP ile sınırlı değildir. Örneğin yakut veya Javascript aynı sorun var.

PHP karmaşık kod ile uğraşırken optimizasyon çok şey yapabilir ama bu çok basit döngüler daha hızlı almazsınız.

Orada (http://developers.facebook.com/news.php?story=358&blog=1 Facebooks "HipHop" gibi) PHP kodu yerli ikili yapan bir derleyici oluşturmak için deneyin bazı projeler var ama onlar hala gelişme vardır.

Belki bu size ilgi olabilir: http://developers.facebook.com/news.php?story=358&blog=1

Onlar yerli koduna PHP dönüşür derleyici geliştirdi. Davanıza yardımcı olmalıdır.

Bu proje üzerinde github barındırılan: http://wiki.github.com/facebook/hiphop-php/