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

Vladimir Timofeev vovkasm на gmail.com
Вт Окт 16 12:29:33 PDT 2012


16 октября 2012 г., 22:32 пользователь Daniel Podolsky
<onokonem на gmail.com> написал:
>> Про асинхронные либы сказали уже много, но либ для работы с форком
>> вроде не было.
> Чет не могу больше молчать :)
>
> Смотрите. На сегодняшнем железе многопроцессная модель требует больших
> процессорных ресурсов, чем многотредная или событийная, в связи с
> высокими расходами на переключение контекста.
Ага, конечно )))
Вот у вас нормальный сервер: 2 проца по 6 ядер.
1. Варинт много процессности:
Запускается 12 процессов, работающих в неблокирующем режиме. Большую
часть времени при нормальном шедулере они будут тусить каждый на своем
ядре.
Переключений контекста... ну будут ИНОГДА (редко в масштабах циклов
процессора, инвалидаций кешей минимум и т.п. и т.д.)

Придумайте, плиз вариант с тредами, который будет быстрей и легче!
При этом стоит помнить, что треды шарят адресное пространство, а оно
будучи шаренным между процессами, работающими на двух процессорах или
даже ядрах требует синхронизации...

>
> Расходы эти низкими не были никогда, но сейчас все остальное железо
> подтянулось настолько, что сохранение-восттановление регистров и
> очистка-загрузка процессорного кеша стала занимать заметное время в
> общем зачете.
При свитчинге тредов происходит тоже самое.

>
> Событийная модель, в общем случае, сложнее для понимания и написания.
> получите-задание-на-открытие-сокета-и-позовите-меня-когда-хендлер-будет-готов-или-произойдет-ошибка-или-случится-таймаут
> получите-задание-на-запись-буфера-в-сокет-и-позовите-меня-когда-запись-закончится-или-произойдет-ошибка-или-случится-таймаут
> и-так-далее
> Очень трудно бывает представить себе алгоритм целиком. Хотя, если
> научиться обходиться без этого представления - все порлучается быстро
> и просто. Хоть и не быстрее и проще, чем линейное программирование.
>
> Остались треды. Из всех сред исполнения тредов на сегодняшний день
> лучшая - JVM. Это я так думаю :)
green-треды это не совсем треды все же )))
Плюс: http://stackoverflow.com/questions/2653458/understanding-javas-native-threads-and-the-jvm
и http://stackoverflow.com/questions/258901/how-does-the-sun-jvm-map-java-threads-to-windows-threads
Так что современная JVM юзает нативные треды.

>
> JVM сааааааавсем не означает сегодня java. масса вполне продвинутых
> языков компилируются в jvm bytecode и исполняются на ней. к примеру -
> Scala. Или Clojure. Или Kotlin.
>
> Есть смысл обратить пристальное внимание на Clojure  - это диалект
> Lisp. На него параллельная обработка ложится очень хорошо...
>
> Как-то так.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Vladimir Timofeev <vovkasm на gmail.com>


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