Re[5]: Mногопоточность: C++ vs Erlang vs другие
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.06.15 12:23
Оценка:
Здравствуйте, neFormal, Вы писали:

I>>С одной стороны, это круто, но с другой стороны, классический UI того же виндовса становится на эрланге невозможной задачей, потому что тяжелые блокирующие вызовы, внезапно, вытолкнуть в тред-пул не выйдет, т.к. объекты прибиты гвоздями к конкретному треду.

I>>Теоретически, сделать можно, но для UI нужна особая архитектура, которая ввергнет в ужас любого UI-девелопера.

F>хз, никогда не делал гуёвые приложения на нём.

F>но не понимаю, откуда там тяжёлые блокирующие вызовы?

Там это где ? В самом эрланге нет таких вещей. Они есть в ОС. Чем больше тебе надо от этой самой ОС, тем больше нужно приседать. Например, в винде весь UI он вот такой — блокирующие вызовы и очень дорогие.
Условно, если ты захочешь писать под винду на эрланге чтото навроде десктоп приложений. Функция SendMessage — блокирующая. Если адресат слегка задумался, на пол-секунды, ты висишь вместе с ним.
Это значит, что нативный поток будет недоступен для других эрланговских процессов, вместе с SendMessage заснёт и эрланговский шедулер, который запущен из расчета по инстанцу на процессорное ядро.
С такими функциями Эрланг поступает следующим образом — делегирует вызов тредпулу, а сам работает со свободными процессами. Как только SendMessage завершился, эрланг продолжает процесс.
Т.е. фактически Эрланг ведет себя как операционная система, только использует кооперативную многозадачность, а не вытесняющую.
Отредактировано 03.06.2015 12:25 Pauel . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.