[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: очень хочется squirrelsh



В Срд, 20/01/2010 в 08:54 +0300, Alexey Pechnikov пишет: 
> Hello!
> 
> On Tuesday 19 January 2010 23:15:25 Oleg Tsymaenko wrote:
> > > Итого в 40 раз медленнее перла запускается ;-) Вычеркиваем? :-)
> > 
> > (IMHO) некорректный тест и некорректные выводы
> > По аналогии:
> > 
> > $ echo '#include "stdio.h"'     >hello.c
> > $ echo 'main(){printf("\n");}' >>hello.c
> > $ gcc hello.c -o hello
> > $ time ./hello
> > 
> > real 0m0.001s
> > user 0m0.000s
> > sys 0m0.000s
> 
> Уточним:
> 
> $ time for i in `seq 1 10`;do ./hello; done
> real	0m0.021s
> user	0m0.000s
> sys	0m0.020s
> 
> А можно и вот так:
> 
> $ diet gcc hello.c -o hello
> $ time for i in `seq 1 10`;do ./hello; done
> real	0m0.014s
> user	0m0.000s
> sys	0m0.008s
> 
> > 
> > у меня "C" в 7 раз быстрее perl... "вычеркиваем" perl!!!
> 
> В зависимости от задачи. Бывает что и да, вычеркиваем.
> 
> > ну и на закуску "вычёркиваем" php и ruby
> > 
> > time php -r 'echo "\n";'
> > real 0m0.042s
> > time ruby -e 'puts("")'
> > real 0m0.009s
> 
> Из этого растут костыли под названием fast-cgi, изобретенные 
> пхпистами, которые прикручиваются ради компенсации тормозного 
> запуска пхп-интерпретатора. Наличие костылей позволяет убедиться
> что проблема и в самом деле есть.

1) fast-cgi изобретён не "пхпистами" и не для пхп
2) php-cgi прожорливей чем mod_php
3) php запускается под fast-cgi не для увеличения производительности а в
целях безопасности


> А ruby вы зря в один ряд с пыхом поставили:
> $ time echo ""|ruby
> 
> real	0m0.012s
> user	0m0.004s
> sys	0m0.004s

> Не буду ставить пых, ибо он безобразие в виде апач за собой тянет,
> но по остальным тестам получается, что у вас машинка вдвое шустрее,
> так что руби запускается на порядок быстрее пхп (у меня частота проца 
> снижена вдвое, т.к. я предпочитаю тишину, а спешить мне некуда).

php-cli ставится без apache.
aptitude install php5-cli

Теперь из личного опыта работы с php:
В реальной жизни не особо сказывается на производительности как запущен
php. Это cgi/fastcgi или mod_apache. Дело в том что в реальных проектах
основные затраты времени на доступ к СУБД и на выполнение кода(а не на
подъем интерпретатора или компиляцию). Это конечно можно оспаривать но
так говорит мой опыт. 



Далее я привожу некоторые замеры производительности но не для того чтобы
"вычеркнуть" какой то язык а только для того чтобы показать не
состоятельность идеи "вычеркивать" что либо просто проводя тесты
производительности.

Примеры с циклом в 100,000,000 итераций (src ниже):
-------+----------+-----+---------------------------
язык      время(s)    K   компилятор/интерпретатор
-------+----------+-----+---------------------------
C          0.315      1   gcc 4.3.4  (с "-O1" )
java      30.520     97   sun-java-1.5.0 (libgcj4.3.4)
perl      72.149    229   perl (v5.10.1)
php       71.872    228   php-cli(5.2.11 Zend-2.2.0)
python   110.251    350   python(2.5.4)
ruby     177.122    562   ruby(1.8.7) 

"K" это отношение времени работы на текущем языке к времени работы на "C"
Например для perl : K=72.149/0.315=229

P.S. Я не уверен насчёт корректности примеров на python и ruby так как не имею опыта программирования на этих языках

P.P.S. Во время работы скрипта на python машина полезла в своп!!!
ps aux |grep python
tsyma    21121 85.6 75.8 1577236 1574520 pts/7 R+   11:17   0:42 python ./hello.py
!!! Это 1.5Gb памяти :)  !!!


============= hello.c ==========================
#include "stdio.h"
main(){
    int     i;
    double  x;
    for (i=0,x=0;i<100000000;i++)
        x+=1.1*i;
    printf("i=%d; x=%.2f\n",i,x);
}
============= hello_java.java ================== 
public class hello_java {
public static void main(String[] args) {
        int    i;
        double x;
        for (i=0,x=0;i<100000000;i++)
           x+=1.1*i;
        System.out.println("i="+i+"; x="+x);
}
}
============= hello.pl =========================
for($i=1,$x=0;$i<100000000;$i++){
    $x+=1.1*$i;
}
printf("i=%d; x=%.2f\n",$i,$x);
============= hello.php ========================
<?php
for ($i=0,$x=0;$i<100000000;$i++)
    $x+=1.1*$i;
printf("i=%d; x=%.2f\n",$i,$x);
============= hello.rb ========================= 
x=0
i=0
while (i<100000000)
    x+=1.1*i
    i+=1
end
puts "i=#{i}; x=#{x}"
============= hello.py =========================
x=0
for i in range(0,100000000):
    x+=1.1*i
i+=1;
print "i=%d;" % i, " x=%.2f" % 

================================================





-- 
Oleg Tsymaenko <tsyma@lafox.net> TSYM1-UANIC


Reply to: