Канал (програмування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Канал (англ. Channel) — програмний механізм взаємодії між процесами і їх синхронізації при передачі даних (обміну повідомленнями). Повідомлення можуть бути надіслані через канал і інший процес або потік, що має посилання на канал, може отримувати повідомлення з каналу як з файлового потоку. Різні реалізації каналів можуть бути синхронними або асинхронними, використовувати або не використовувати буферизацію повідомлень.

Канали є основоположним поняттям для реалізації підходу числення процесів і з'явилися у взаємодіючих послідовних процесах (CSP) формальної моделі паралелізму. Канали використовуються в багатьох мовах програмування, таких як Occam, Limbo (через мови Newsqueak і Alef)[1] для вирішення задач паралельних та конкурентних обчислень. Вони також використовуються в потокової бібліотеці libthread мови програмування Сі в ОС Plan 9, а також в Stackless Python та Go[2].

Реалізації каналів[ред. | ред. код]

Канали, створені за аналогією з моделлю CSP, є синхронними: процес, що очікує одержання даних з каналу, блокується, доки дані не надійдуть у канал. Такі реалізації називають «rendezvous». Типові операції над синхронними каналами представлені на прикладі інтерфейсів каналів бібліотеки libthread для мови C системи BSD[3]:

Channel *ch;
ch = chancreate(int elemsize, int bufsize);
  • Відправлення в канал:
int chansend(Channel *c, void *v)
  • Отримання з каналу:
int chanrecv(Channel *c, void *v)

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Limbo. Архів оригіналу за 9 листопада 2020. Процитовано 7 липня 2017.
  2. Go Concurrency versus C and pthreads. Архів оригіналу за 18 червня 2017. Процитовано 7 липня 2017.
  3. LIBCCCO (3) // BSD library[недоступне посилання з липня 2019]