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: