In computing, a channel is a model for interprocess communication and synchronization via message passing. A message may be sent over a channel, and another process or thread is able to receive messages sent over a channel it has a reference to, as a stream. Different implementations of channels may be buffered or not, and either synchronous or asynchronous. libthread channels The multithreading library, libthread, which was first created for the operating system Plan 9, offers inter-thread communication based on fixed-size channels. OCaml events The OCaml event module offers typed channels for synchronization. When the module's send and receive functions are called, they create corresponding send and receive events which can be synchronized. Examples Lua Love2D The Love2D library which is part of the Lua programming language implements channels with push and pop operations similar to stacks. The pop operation will block so as long as there is data resident on the stack. A demand operation is equivalent to pop, except it will block until there is data on the stack-- A string containing code which will be interpreted by a function such as loadstring(), -- but on the C side to start a native thread. local threadCode = [[ love.thread.getChannel("test"):push("Hello world!") ]] function love.load() -- Start the thread. thread = love.thread.newThread(threadCode) thread:start() -- The thread will block until "Hello world!" is popped off channel test's stack. -- Because the channel can be popped from before the thread first executes, there may not be data on the stack. -- in that case use :demand() instead of :pop() because :demand() will block until there is data on the stack and then return the data. print(love.thread.getChannel("test"):demand()) -- The thread can now finish. end XMOS XC The XMOS programming language XC provides a primitive type "chan" and two operators "<:" and ":>" for sending and receiving data from a channel. In this example, two hardware threads are started on the XMOS, running the two lines in the "par" block. The first line transmits the number 42 through the channel while the second waits until it is received and sets the value of x. The XC language also allows asynchronous receiving on channels through a select statement. chan c; int x; par { c <: 42; c :> x; } Go This snippet of Go code performs similarly to the XC code. First the channel c is created, then a goroutine is spawned which