Библиотека сайта rus-linux.net
Система Asterisk
Глава 1 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: Asterisk,
глава из книги "The Architecture of Open Source Applications" том 1.
Автор: Russell Bryant
Перевод: Н.Ромоданов
1.3. Потоки
Система Asterisk является очень «тяжелым» многопоточным приложением. Оно использует интерфейс API потоков POSIX для управления потоками и относящимися к ним сервисами, например, блокировками. Весь код системы Asterisk, взаимодействующий с потоками, сделан так, что в нем присутствует набор обверток, используемых для отладки. Большую часть потоков в Asterisk можно считать либо потоком мониторинга сети (Network Monitor Thread), либо канальным потоком (Channel Thread), который иногда также называется потоком АТС (автоматической телефонной станции), поскольку его первоначальное назначение состояло в выполнении в канале функции АТС.
1.3.1. Потоки мониторинга сети
Потоки мониторинга сети имеются в системе Asterisk в каждом из основных драйверов канала. На них возлагается обязанность вести наблюдение за сетью, к которой они подключены (независимо от того, будет ли это сеть IP или обычная телефонная сеть), а также за всеми поступающими вызовами или другими типами поступающих запросов. С их помощью также осуществляется первоначальная настройка соединения, например, аутентификация и проверка набранного номера. После того, как настройка вызова будет выполнена, потоки мониторинга сети создадут экземпляр канала (ast_channel
) и запустят канальный поток, которые будет обрабатывать вызов в течение всего оставшегося времени существования вызова.
1.3.2. Канальные потоки
Как уже обсуждалось ранее, канал является фундаментальной концепцией в системе Asterisk. Каналы могут быть входящими или исходящими. Входящий канал создается тогда, когда в систему Asterisk поступает входящий вызов. Эти каналы являются именно теми, которые выполняются согласно описаниям dialplan системы Asterisk. Для каждого канала, который выполняется согласно dialplan, создается поток. Такие потоки называются канальными потоками.
Приложения dialplan всегда исполняются в контексте канального потока. Функции dialplan почти всегда исполняются таким же образом. С помощью асинхронного интерфейса, например, интерфейса командной строки Asterisk, можно читать и записывать функции dialplan. Тем не менее, всегда есть канальный поток, который является владельцем структуры данных ast_channel
и управляет временем жизни объекта.
Продолжение статьи: Сценарии вызовов.