Эрланг: Когда логично создавать новый процесс?Когда нет? - PullRequest
1 голос
/ 13 января 2012

Если у нас действительно тяжелая система процессов, в которой процесс нереста производится для некоторого распределения нагрузки - это понятно.

Если мы говорим о веб-сервере: хорошая идея - создавать новый процесс для каждого соединения, потому что тогда он может быть распределен.А что еще?Единый процесс для модели, вида и контроллера?Звучит странно, потому что все они работают «лайнерным» способом, поэтому параллелизм не может быть хорошим, и мы получаем только накладные расходы при обмене.Кроме того, эти «Модель, Вид и Контроллер» настолько легки, что могут оставаться в одном процессе, не так ли?

Итак, где же хорошо создавать новый процесс, кроме «нового соединения»?ситуация.

Спасибо за совет.

Ответы [ 2 ]

2 голосов
/ 14 января 2012

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

Возможно, вы также захотите выполнить параллельную обработку списка значений.(см. pmap).

К вашей точке «обмена» вы должны знать, что процессы Erlang не используют возможности op-sys для планирования, а планирование практически бесплатно.

В конкретном случае сервера веб-приложений я понимаю ваш вопрос.Если вы пишете обычное веб-приложение с очень небольшим состоянием общего ресурса.Ваш веб-фреймворк, вероятно, уже обрабатывает состояние кэширования и сеанса и тому подобное (эти средства будут порождать процесс).

Мы все очень хорошо знакомы с этой моделью веб-приложений без сохранения состояния.Нам всем сказали с тех пор, как мы были щенками, системы с состоянием сложно разрабатывать, и они не масштабируются.Я думаю, вы найдете, что есть те, кто бросает вызов этому.По мере улучшения поддержки браузерами WebSockets и использования серверного языка, такого как Erlang и Clojure, обеспечивающего масштабируемые платформы с безопасным управлением состоянием, появятся те, кто сможет создавать больше интерактивных веб-приложений.В качестве крайнего примера, не могли бы вы представить себе WoW как веб-приложение?

1 голос
/ 17 января 2012

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

В Erlang общее «правило» заключается в том, что вы используете процессы для моделирования одновременной деятельности и управления общими ресурсами. Процессы - это фундаментальный способ структурирования вашей системы.

...