Catalyst: увеличиваем скорость реакции
Oleg Alistratov
ali at ali.org.ua
Mon Sep 13 07:05:25 PDT 2010
On 12.09.2010 18:44, Sergeev Serge wrote:
> Вообще в Перл 5 к сожалению (в отличие от ПХП) есть только один метод
> разблокировать клиента и продолжить фоновое выполнение - это форк
> (запускается копия текущего процесса, а затем эта копия отсоединяется
> от текущего процесса, а сам текущий процесс завершается и отпускает
> клиента).
Перл тут не при делах, однако. Специфика cgi.
Зависит от того, на чем там каталист ездит. Для CGI/FastCGI можно
попробовать закрыть STDOUT, для mod_perl - connection оторвать. Должно
помочь.
Кстати, может быть вполне достаточно сделать
STDOUT->flush;
и
$req->rflush;
соответственно. Апач лишний раз буферить не будет (раньше только для nph
выталкивал данные в сокет сразу, теперь для всех), только рендер на
клиенте зависит от браузера — православные нарисуют сразу, эксплорер
может еще чего-то ждать.
Есть ли у Каталиста специальные ручки для этой цели — не знаю.
> При этом очевидно, что форк catalyst это ужжасно долго, следовательно
> нужно форк делать совсем отдельным сверхлегким внешним процессом или
> еще как-то изощряться (например, можно запустить под system
> шелл-скрит, который будет запускать под nohup демона для выполнения
> задачи и тут-же завершаться).
Форк совершенно недолго делается. А после форка родитель
просто закроет потоки и умрет, что можно сделать — см. выше.
--
Ali
More information about the Kiev-pm
mailing list