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