Канал (программирование)

редактировать

В вычислениях канал является моделью для межпроцессного взаимодействия и синхронизации посредством передачи сообщений. Сообщение может быть отправлено по каналу, а другой процесс или поток может получать сообщения, отправленные по каналу, на который он имеет ссылку , как поток stream. Различные реализации каналов могут быть буферизованными или нет, а также синхронными или асинхронными.

Каналы имеют фундаментальное значение для подхода исчисления процессов к параллелизму и возникли в взаимодействующих последовательных процессах (CSP), формальной модели для параллелизма, и использовались в многие производные языки, такие как occam и язык программирования Limbo (через Newsqueak и язык программирования Alef ). Они также используются в Plan 9 из библиотеки Bell Labs, а также в Stackless Python и языке программирования Go.

Содержание
  • 1-канальные реализации.
    • 1.1 Каналы libthread
    • 1.2 События OCaml
  • 2 Примеры
    • 2.1 XMOS XC
    • 2.2 Go
  • 3 Приложения
  • 4 Ссылки
  • 5 Внешние ссылки
Реализации каналов

Каналы, смоделированные по модели CSP, по своей сути являются синхронными : процесс, ожидающий получения объекта из канала, будет блокировать, пока объект не будет отправлен. Это еще называется. Типичные поддерживаемые операции представлены ниже на примере API канала.

  • Создание канала фиксированного или переменного размера, возврат ссылки или дескриптора
    Channel * chancreate (int elemsize, int bufsize)
  • отправка в канал
    int chansend (Channel * c, void * v)
  • получение из канала
    int chanrecv (Channel * c, void * v)

libthread каналы

Библиотека многопоточности, которая была впервые создана для операционной системы Plan 9, предлагает межпотоковое взаимодействие на основе каналов фиксированного размера.

События OCaml

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

Примеры

XMOS XC

Язык программирования XMOS XC предоставляет примитивный тип «chan» и два оператора «<:" and ":>"для отправки и получения данных из канала.

В этом примере два аппаратных потока запускаются на XMOS, выполняя две строки в блоке" par ". Первая строка передает число 42 по каналу, а вторая ожидает его получения и устанавливает значение x. Язык XC также допускает асинхронный прием по каналам с помощью оператора select.

чан с; int x; номинал {c <: 42; c :>x; }

Go

Этот фрагмент кода Go работает так же, как код XC. Сначала создается канал c, затем создается горутина, которая отправляет 42 через канал. Когда номер вводится в канал, для x устанавливается значение 42. Go позволяет каналам буферизовать содержимое, а также не блокировать прием с помощью блока выбора.

c: = make (chan int) go func () {c <- 42}() x := <- c
Приложения

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

Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-14 05:35:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте