Библиотека сайта rus-linux.net
Riak и Erlang/OTP
Глава 15 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: "Riak and Erlang/OTP", глава из книги "The Architecture of Open Source Applications"
Авторы: Francesco Cesarini, Andy Gross and Justin Sheehy
Перевод: Н.Ромоданов
Creative Commons: Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.
15.2. Остов процесса
Ранее мы определили, что процессы создаются по общему образцу независимо от того, для какой цели они были созданы. Для начала, должен быть создан процесс, а затем, при необходимости, должен быть зарегистрирован алиас. Первым действием вновь созданного процесса является инициализации данных цикла процесса. Данные цикла часто создаются в результате передачи аргументов при инициализации процесса во встроенную функцию spawn
. Данные цикла процесса сохраняются в переменной, которую мы называем состоянием процесса. Состояние, часто сохраняемое в виде записи, передается в функцию приема-оценки, работающую в цикле, который получает сообщение, обрабатывает его, обновляет состояние, и передает его обратно в качестве аргумента в вызов оставшейся части рекурсивного обработки. Если одно из сообщений, которые он обрабатывает, является сообщением «stop», то процесс, принявший его, очистит все за собой, а затем завершится.
Это повторяющаяся тема, которая будет происходить с процессами независимо от задачи, выполняемой процессом. Помня об этом, давайте посмотрим на различия между процессами, соответствующими этому образцу:
- Аргументы, передаваемые в вызовы встроенной функции
spawn
, будут в различных процессах различными. - Вы должны решить, должны ли вы регистрировать процесс с алиасом, и если вы будете регистрировать, то должны решить, какой алиас следует использовать.
- В функции, инициализирующей состояние процесса, выполняемые действия различаются в зависимости от задач, которые будет выполнять процесс.
- Состояние системы в каждом случае представлено данными цикла, но содержимое данных цикла будет варьироваться в зависимости от процессов.
- В теле, в котором осуществляется прием и оценка данных цикла, процессы будут получать различные сообщения и обрабатывать их по-разному.
- И, наконец, очистка данных, выполняемая при завершении процесса, будет варьироваться и будет зависеть от конкретного процесса.
Поэтому, даже если и есть скелет общей последовательности действий, эти действия дополняются другими действиями, которые непосредственно связаны с конкретными задачами, выполняемыми в этом процессе. Используя этот скелет в качестве шаблона, программисты могут создавать процессы языка Erlang, которые действуют как серверы, конечные автоматы, обработчики событий и супервизоры. Но для того, чтобы каждый раз не реализовывать повторно эти образцы, они были помещены в библиотечные модули, которые называются поведением (behavior). Они поставляются как часть промежуточной среды OTP.
Продолжение статьи: Поведения OTP.