Язык программирования Perl
Шрифт:
Выполнение всей программы заканчивается, когда заканчивается последний порожденный процесс. Ожидание окончания выполнения всех дочерних процессов можно организовать с помощью функции wait,
В Perl есть несколько способов организации взаимодействия процессов при их параллельном выполнении. Один из них - создать программный канал (pipe), который представляет из себя два файловых манипулятора - приемник (reader) и передатчик (writer) - связанных таким образом, что записанные в передатчик данные могут быть прочитаны из приемника. Программный канал создается с помощью функции pipe, которой передаются имена двух файловых манипуляторов: приемника и источника. Один из вариантов взаимодействия процессов через программный канал показан в следующем примере:
Во время выполнения этого примера в стандартный выходной поток будет выведено следующее:
Если нужно организовать передачу данных в обратном направлении, организуется канал, в котором передатчик будет в процессе-потомке, а приемник - в процессе-предке. Так как с помощью программного канала можно передавать данные только в одном направлении, то при необходимости двустороннего обмена данными между процессами создаются два программных канала на передачу в обоих направлениях.
Кроме программных каналов, процессы могут обмениваться информацией и другими способами: через именованные каналы (FIFO) и разделяемые области памяти, если они поддерживаются операционной системой, с помощью сокетов (что будет рассмотрено в следующей лекции) и при помощи сигналов.
В операционных системах имеется механизм, который может доставлять процессу уведомление о наступлении какого-либо события. Этот механизм основан на так называемых сигналах. Работа с ними происходит
Выполнение примера сопровождается выводом сообщений, подтверждающих обработку поступившего сигнала:
Примером реальной программы, выполняющейся в бесконечном цикле, может служить любой сервер, ожидающий запросов от клиентских программ и перечитывающий свой конфигурационный файл после получения определенного сигнала (обычно HUP или USR1). Если необходимо временно игнорировать какой-то сигнал, то соответствующему элементу хэша %SIG присваивается строка 'IGNORE'. Восстановить стандартную обработку сигнала можно, присвоив соответствующему элементу %SIG строку 'DEFAULT'.
Процесс может посылать сигналы самому себе, например, для отслеживания окончания запланированного периода времени (для обработки тайм-аута). В приведенном примере длительная операция прерывается по истечении указанного промежутка времени:
100 знаменитых отечественных художников
Документальная литература:
биографии и мемуары
рейтинг книги
Кукольная королева
1. Игра Лиара
Фантастика:
фэнтези
рейтинг книги
Тшай планета приключений.
Фантастика:
научная фантастика
рейтинг книги
Путь "Чёрной молнии"
1. Путь "Чёрной молнии"
Детективы:
криминальные детективы
исторические детективы
боевики
рейтинг книги
Статьи
Документальная литература:
критика
публицистика
рейтинг книги
Я все еще князь. Книга XXI
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Скальпель разума и крылья воображения. Научные дискурсы в английской культуре раннего Нового времени
Научно-образовательная:
культурология
рейтинг книги
Вор и Книга Демона
Фантастика:
героическая фантастика
рейтинг книги
Серые пустоши жизни. Оригинальная БДСМ порно-версия.
Дом и Семья:
образовательная литература
рейтинг книги
Шанс, в котором нет правил [черновик]
Фантастика:
научная фантастика
рейтинг книги
Распутин
Проза:
историческая проза
рейтинг книги
"Зарубежная фантастика 2024-4" Цикл "Люди льда". Компиляция. Книги 1-23
Зарубежная фантастика 2024
Фантастика:
фэнтези
рейтинг книги
История Раскола
Warhammer Chronicles
Фантастика:
боевая фантастика
эпическая фантастика
рейтинг книги
Философия
Научно-образовательная:
философия
рейтинг книги