Демонизация или скрипт в фоновом режиме

john.brown
Демон лучше вообще писать на С. Написать на С сложнее чем на Perl или PHP, но вот рессурсов сишный демон будет потреблять меньше.

Можно сравнение скорости. а именно на сколько PCRE в perl быстрее чем в php?
 
phprus

тесты на апачевском логе в 1 мб

test1.php - 0.0952301025391 sec(s)
PHP:
<?php

$result = Array();
$start = microtime(true);
while(!feof(STDIN)){
	$line = fgets(STDIN);
	if ( preg_match('/referer:\s+(.*\.php)/i',$line,$m) )
		$result[] = $m[1];
}
$exec = microtime(true) - $start;
echo "$exec sec(s)\n";
echo join("\n",$result);

?>

test1.pl - 0.0600860118865967 sec(s)
PHP:
#!/usr/bin/perl -w
use strict;
use Time::HiRes qw/time/;
my @result = ();
my $start = time;
while (<>){
	push(@result,$1) if /referer:\s+(.*\.php)/io
}
my $exec = time - $start;
print "$exec sec(s)\n";
print join("\n",@result);

test2.php - 0.0270338058472 sec(s)
PHP:
<?php

$text = "";
while (!feof(STDIN)) $text .= fread(STDIN,2048);
$start = microtime(true);
preg_match_all('/referer:\s+(.*\.php)/i',$text,$m);
$exec = microtime(true) - $start;
echo "$exec sec(s)\n";
var_dump($m);

?>

test2.pl - 0.020028829574585 sec(s)
PHP:
#!/usr/bin/perl -w
use strict;
use Time::HiRes qw/time/;
my @result = ();
my $text = "";
$text .= $_ while <>;
my $start = time;
push(@result,$1) while $text =~ /referer:\s+(.*\.php)/igo;
my $exec = time - $start;
print "$exec sec(s)\n";
print join("\n",@result);

ЗЫ. чето форум сжирает бекслеши из перловых регулярок
 
whirlwind
Понял. был не прав в отношении скорости. Хотя во втором случае разница не так велика.

ЗЫ. чето форум сжирает бекслеши из перловых регулярок
А если попробовать без подсветки? то тоже бекслеши пропадают?
 
phprus
а потенциальные ошибки типа утечек памяти и всевозможных переполнений? Уж лучше на джаве..
 
>Хотя во втором случае разница не так велика
правильно. я специально два варианта привел. во втором случае выполняется поиск в одной строке. первый случай демонстрирует то, что PHP компилирует регэксп при каждом вызове или дескрипторы медленные.
 
И синтаксис! Что может быть изяшнее и лаконичнее записи:

while (<> ){ push(@result,$1) if /referer:\s+(.*\.php)/io }

Ну ни как пхп`шный вариант... Так что не чего наезжать на перл, хороший язык... ;)
 
whirlwind
первый случай демонстрирует то, что PHP компилирует регэксп при каждом вызове
в php есть такой modifier - S
S - When a pattern is going to be used several times, it is worth spending more time analyzing it in order to speed up the time taken for matching. If this modifier is set, then this extra analysis is performed. At present, studying a pattern is useful only for non-anchored patterns that do not have a single fixed starting character.
 
Сверху