LINUX.ORG.RU

Непонятные тормоза в паренте после fork


0

0

Что-то я не пойму откуда беруться тормоза.

Общий смысл такой. Делаю поисковый механизм по БД mysql. Результаты выборки сразу сбрасываются во внешний файл. Запрос mysql я запускаю в форке - фоном. В основном процессе отслеживаю либо завершение запроса, либо наличие в файле результата определенного количества строк.

Схема кода:

if (...)
{
    ...
    $SIG{CHLD} = 'IGNORE';
    my $pid = fork();
    if ($pid eq '0')
    {
	$r->cleanup_for_exec();
	open STDIN, '/dev/null'  or die "Can't read /dev/null: $!";
	open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
	open STDERR, '>/tmp/log' or die "Can't write to /tmp/log: $!";
	my $setsidres = POSIX::setsid();
	eval {
		$dbho->do($sql);
	};
        open(FF, ">".$finishfile); print FF time(); close(FF);		
        CORE::exit(0);
    };
    ...
open(LOG, ">>/tmp/fork_search.log"); print LOG time(), ": ok1...\n"; close(LOG);
};
open(LOG, ">>/tmp/fork_search.log"); print LOG time(), ": ok2...\n"; close(LOG);


Вот в данном случае между двумя последними выводами в LOG проходит много времени, а конкретно - пока не завершиться процесс-потомок.

Может я что-то упустил? Почему выполнение второго вывода в лог привязано к завершению дочернего процесса?

Re: Непонятные тормоза в паренте после fork

Извиняюсь - это все на perl под mod_perl apache2.

UncleAndy ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.