sends 42 through the channel. When the number is put in the channel x is set to 42. Go allows channels to buffer contents, as well as non blocking receiving through the use of a select block. c := make(chan int) go func() {c <- 42}() x := <- c Rust Rust provides asynchronous channels for communication between threads. Channels allow a unidirectional flow of information between two end-points: the Sender and the Receiver. use std::sync::mpsc; use std::thread; fn main() { let (tx, rx) = mpsc::channel(); thread::spawn(move || { tx.send(123).unwrap(); }); let result = rx.recv(); println!("{:?}", result); } Applications In addition to their fundamental use for interprocess communication, channels can be used as a primitive to implement various other concurrent programming constructs which can be realized as streams. For example, channels can be used to construct futures and promises, where a future is a one-element channel, and a promise is a process that sends to the channel, fulfilling the future. Similarly, iterators can be constructed directly from channels. List of implementations List of non-standard, library based implementations of channels For Scala: CSO -- Communicating Scala Objects is a complete DSL for channel-based communication and concurrency whose semantic primitives are generalizations of the OCCAM primitives. CSO has been used since 2007 in the teaching of concurrent programming, and relevant lectures can be found with the ThreadCSO implementation. For C++: stlab This implementation supports splits, and different merge and zip operations. Different executors can be attached to the individual nodes. References External links Libthread Channel Implementation Bell Labs and CSP Threads Limbo – Inferno Application Programming Stackless.com – Channels – OCaml Events Inter-process communication Go (programming language) software