Описание тега channels

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

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

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

Общие ссылки:

Определение канала в Википедии

Язык:

Канал является одной из основных конструкций Go и обычно стоит за каждым распараллеливанием.

Как описано в спецификации Go :

Канал предоставляет механизм для двух одновременно выполняемых функций для синхронизации выполнения и обмена данными путем передачи значения указанного типа элемента.

      // creation of a basic synchronous channel of strings
c := make(chan string)

// creation of a channel enabling the buffering of 100 strings before blocking
c := make(chan string, 100)

// sending of a string over the channel
c <- "somestring"

// closing of a channel
close(c)

// reception from a channel. This blocks until a string is available
s := <- c

// blocking loop over a channel until closing
for s := range c {

Язык Java:

В Java 1.4 New IO представил канал как интерфейс со многими конкретными реализациями, предназначенными для замены использования потока в параллельных контекстах:

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

Канал либо открыт, либо закрыт. Канал открыт при создании и после закрытия остается закрытым. Как только канал закрыт, любая попытка вызвать для него операцию ввода-вывода вызовет исключение ClosedChannelException. Открыт ли канал, можно проверить, вызвав его метод isOpen.

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