Описание тега channel
Конструкция канала часто используется в многопоточных программах, чтобы обеспечить безопасную синхронизацию потоков выполнения и обмен объектами между ними.
При использовании этого тега для ссылки на конкретную реализацию на языке программирования или библиотеке не забудьте добавить дополнительный тег, чтобы избежать путаницы, например go channel.
Общие ссылки:
Go Язык:
Канал является одной из основных конструкций 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.
Каналы, как правило, предназначены для обеспечения безопасности многопоточного доступа, как описано в спецификациях интерфейсов и классов, которые расширяют и реализуют этот интерфейс.