Есть хорошая технология AnyEvent (на самом деле их множество разных).  Когда ваяем какой-либо сервер с использованием этой технологии, то под нее довольно хорошо ложится только простая передача контента из сокета в сокет. А вот если сюда надо добавить обработку данных, то в зависимости от того насколько эта обработка сложная технология может начать хромать на обе ноги.<br>
<br>схема:<br><br>1. взяли данные из одного места (AE::io $place, 0 sub {})<br>2. сделали над данными преобразование (тот самый sub)<br>3. отдали их клиенту (AE::io, $client, 1, sub {})<br><br>все работает красиво и быстро, пока пункт 2 выполняется быстро. Когда в пункте 2 мы делаем например какую-то текстовую обработку данных, то вся система понижает время отклика.<br>
<br>хочется спросить у аудитории кто какие пути борьбы с этим знает?<br><br>наиболее очевидный - запуск N параллельных процессов, которые работают по этой схеме. Получается что это работает сильно лучше форковой схемы (один процесс на одного клиента), но в целом тоже может страдать отклик. появляется проблема что если один процесс &quot;схватил&quot; несколько клиентов, а один из них требует выполнения ресурсоемкого задания, то другой клиент будет ждать, хотя мог бы быть обработан<br>
<br>и менее очевидный - вынесение пункта 2 в отдельный (отдельные) процесс и тогда обычным AE::io сплавлять ему данные и получать ответ.<br><br>но тут встает  задача быстрой передачи данных задания в другой процесс. сериализация/десериализация сама по себе может оказаться довольно накладной вещью и возвращаемся к тому с чего мы начали. А есть ли способ (может на базе mmap кто-то делал решение?) быстрой передачи объекта perl между двумя процессами? И вообще, кто решал подобные проблемы, поделитесь соображениями?<br>