Hi all!!#/usr/bin/perl
print "Content-Type: text/html\n\n";
print "Counter: " . (++$counter) . "\n";
print time(), "\n";
sleep(20);
print time(), "\n";
Вот этот скрипт я запускаю дважды, в двух окнах браузера с интервалом в несколько секунд (около 10).
Оба выдают одинаковый результат и завершают выполнение одновременно.
Но если я правильно понимаю, Apache должен передавать работу другому потомку, если первый занят и, соответственно, оба скрипта должны бы выполняться паралельно, завершаться с тем же интервалом и выдавать разные результаты (независимые др. от др. $counter'ы и время).
Да даже если должны выполняться последовательно в одном потомке - тоже не понятно почему результаты одинаковые.
Если сделать копию скрипта и запустить оригинал и копию с тем же оригиналом - результаты ожидаемые - $counter'ы не зависят др. от др., время выдается различное.
И еще не очень понимаю как работают и создаются потомки. А именно:
Every time a server gets a request to process, it hands it over one of the children, generally in a round robin fashion.
вот здесь не понимаю - один потомок обрабатывает только один скрипт (как speedycgi), при этом может быть несколько потомков для одного скрипта, либо же одному потомку может быть поручена работа по обработке различных скриптов?
Разница, надо заметить ощутима.
Если 1 потомок обрабатывает 1 скрипт (и больше ничего), то всё ясно - глобальные переменные не очищаются, да вообще никакая чистка не проводится. Но всё, что сохранено - может быть только следствием работы одного скрипта
А вот когда 1 потомок может обрабатывать несколько скриптов, каждый из которых подключает одинаковые модули (к примеру My::Test), тогда глобальные переменные модулей сохраняются не только между вызовами одного скрипта, но и между вызовами нескольких скриптов. Т.е. скажем скрипт 1 установил $My::Test::variable = 123; Потом запустился скрипт 2 - получится, что $My::Test::variable == 123. Вот такого упоминания в документации по мод_перлу не видел:(.