Re: Catalyst: увеличиваем скорость реакции

Alexandr Ciornii alexchorny at gmail.com
Mon Sep 13 11:36:30 PDT 2010


13 сентября 2010 г. 19:54 пользователь Sergeev Serge <simne at yandex.ru> написал:
> 13.09.10, 02:27, "Alexandr Ciornii" <alexchorny at gmail.com>:

>>  > Вообще в Перл 5 к сожалению (в отличие от ПХП) есть только один метод разблокировать клиента и продолжить фоновое выполнение - это форк (запускается копия текущего процесса, а затем эта копия отсоединяется от текущего процесса, а сам текущий процесс завершается и отпускает клиента).
>>
>>  Насколько я помню,  close(STDOUT); позволяет продолжить выполнение
>>  после полной отдачи страницы. А как в PHP это можно сделать?
>
> Как раз в PHP оно именно где-то так, просто и делается.

Даже если PHP запущен как mod_php или под FastCGI?

> А вот в Perl close(STDOUT) в mod_perl/fast-cgi вообще не имеет смысла, а fork работает и в cgi, и в fast-cgi, и в mod_perl.
>
>>  > При этом очевидно, что форк catalyst это ужжасно долго,
>>
>>  fork под Unix - это всегда очень быстро, программа не копируется, а
>>  используется COW. Например, Apache+mod_perl использует COW, а в данном
>>  случае размер процесса может быть весьма большим.
>
> Вы не забыли что речь идет не о helloworld а о реальном продакшеновом приложении под catalyst?
> Там может быть например презагрузка кучи либ и также прекеширование данных на старте.
> Ну допустим оно даже форкается тупым копированием памяти, но это все равно сожрет кучу ОЗУ

Как я написал раньше, fork - это не копирование. Память помечается как
используемая несколькими процессами. fork был специально так
оптимизирован. В частности, system() работает через fork().

> Так, по опыту, в реальной жизни, приложение на catalyst может стартовать десятки секунд.

Запускаться и делать fork - принципиально разные вещи.


-- 
Alexandr Ciornii, http://chorny.net


More information about the Kiev-pm mailing list