[Moscow.pm] Обмен данными с потоком.

Victor Efimov victor на vsespb.ru
Чт Июн 5 23:50:04 PDT 2014


6 июня 2014 г., 7:35 пользователь Vladimir Melnichenko
<melnichenkovv на gmail.com> написал:
>>Ну а если воркеры вычисления делают, т.е. CPU потребляют, будет работать?
>
> Отвечу за Антона - будет, медленней точно не станет.
Только на одном CPU.

> Оборачиваем "воркер" в async - в цикле эти асинки складываем в массив,
> Делаем join и радуемся массиву значений.

> Создавать под это процессы это перебор.
Вот из задания ТС не очевидно перебор это или нет, требований к
производительности нет, что воркеры делают - не написано, насколько
это задание и результат важно для ТС тоже не написано.

>
>
> 5 июня 2014 г., 22:24 пользователь Victor Efimov <victor на vsespb.ru> написал:
>
>> 5 июня 2014 г., 22:12 пользователь Antonio Nikishaev <a на lelf.me> написал:
>> > Нахрена вам разделяемая память и костыли с трубами?

Я бы не назвал это костылями, это дефолтный способ как делается
взаимодействие между процессами в POSIX системах, есть вариации
(вместо пайпов сокеты, или IPC shared memory, может быть
mmap, passfd). Другое дело что это можно назвать велосипедом, т.к. код
приходится писать самому. Ну есть готовые модули которые что-то из
этого делают, например Parallel::ForkManager, хотя для этой задачи он
не очень то подходит. Может есть другие. Возможно универсального
модуля нет, т.к. сложно сделать один подходящий для всех применений, а
для некоторых применений есть job сервера, или просто сервера (типа
HTTP::Daemon + самостоятельный форк = уже не нужно взаимодействие
между мастером и воркерами)

Посмотрите на браузеры - chrome использует мультипроцессинг, "признав"
его превосходство перед threads в linux, firefox использует threads,
но никому в голову не пришло использовать библиотеки для ассинхронного
ввода-вывода, на одном ядре.


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