Анонимные каналы

anonimnye kanaly Системные инструменты параллельного выполнения

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

Большую часть работы с каналами проделывает операционная система. Например, функции для чтения данных из канала обычно блокируют вызывающую программу, пока данные не станут доступны (то есть будут отправлены программой на другом конце), вместо того чтобы возвращать признак конца файла. Кроме того, функция чтения из канала всегда возвращает самые «старые» данные, записанные в канал, то есть каналы реализуют модель «первым пришел, первым ушел» — данные, которые были записаны раньше, будут прочитаны в первую очередь. Такие особенности позволяют использовать каналы для синхронизации выполнения независимых программ.

Каналы бывают двух видов — анонимные и именованные. Именованные каналы (иногда их называют «fifo») представляются в компьютере в виде файла. Так как именованные каналы фактически являются внешними файлами, взаимодействующие процессы вообще могут быть не связаны родственными узами — они могут быть совершенно независимыми программами.

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

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий