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