[Moscow.pm] Распараллелить

Warstone@list.ru warstone на list.ru
Вт Окт 16 02:47:09 PDT 2012


Tue, 16 Oct 2012 10:31:11 +0100 (BST) от ksvs <ksvs1996 на ymail.com>:
>Теперь буду, думать как сделать, чтобы
 страницы запрашивались и обрабатывались одновременно.
>Линкольн говорит, что thread использовать не стоит.
>Наверно, ситуация с тех пор не изменилось, так как у меня perl ругается: "This Perl not built to support threads".
>Можно попробовать, как кто-то мне говорил, асинхронные библиотеки. А какие? Их так много на CPAN.Ну во-первых: Если сбилдить перл с поддержкой тредов, то они-таки будут, но действительно - потоки нужны только тогда, когда идет обмен большим количеством информации, а работать с шаред памятью не хочется/не знаешь как или не получается по тем или иным причинам. Все остальное решается префорком и кормлением задачами через пайпы. В вашем случае именно это и надо сделать.
>Но, ведь кроме получения данных надо их обрабатывать.
>Хочется, чтобы все ядра процессора работали, а не одно.
>Поэтому надо использовать fork.
>
>Как-то не понятно, а когда нужны асинхронные библиотеки? Если интернет
 быстрый.
>Читал, что fork не занимает много памяти из-за COW (или как оно там).
>Но какая разница 10 процессов по 1 HTML странички в каждом или в одном 10 HTML страничек?
>А так при анализе страничек все ядра процессора будут использоваться!
>Да и базы данных все синхронные, кажется.Тут есть другая мысль... Если вы используете синххронные библиотеки, то модель работы такая: Запрос, ждем пока ответят, обрабатываем. Проблема в том, что будет часть "ждем когда ответят". В это время процесс ничего не делает (грубо говоря, конечно), а это значит что надо плодить процессов больше, чем ядер у процессора и вообще получается сложно ответить на вопрос "сколько процессов надо наплодить"

Если-же вы пользуете асинхронные библиотеки, то получается так: Запрос(ы), если есть что готовое, то обрабатываем, проверяем что запросы закончились и заного запрашиваем. В этом случае у вас получается что процессов надо ровно столько, сколько ядер и вы можете быть уверенными, что, в случае сложной обработки (когда у вас узкое горло не сеть, а процессор), все ядра будут нагруженными.
>А сейчас изучение затормозилось. Не могу найти
 хороший модуль, для общения с дочерними процессами.
>Есть модуля для распараллеливания задач по fork, но они все примитивные.
>Хочется, чтобы дочерний процесс мог у родителя запросить дополнительные данные, если в этом возникнет необходимость,
>вернуть промежуточные результаты и прочие.
>В каком модуле на СПАНЕ это есть? А есть, чтобы можно было не только задействовать все ядра CPU, а и несколько компьютеров?А напишите сами... У вас всегда есть пайпы (STDIN STDOUT), вот через них и общайтесь с чилдами. Еще можно через юникс сокеты или просто через локальный сокет-сервер и сокет-клиенты.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121016/1048e9b7/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm