A [[Programming Languages|Programming Language]] primitive that typically follows [[Queues|Queue]] semantics, but within a single program. They are a core construct in the [[Communicating Sequential Process]] paper which heavily inspired the design of [[Golang|Go]]. [[Rust]] has pretty strong support for channels as well, both in [[Asynchronous Programming|async]] and synchronous models of programming. # Tips When using many channels (ie. more than 1), try to centralize the dispatch of behavior into a single place. You can do this with some models of [[Asynchronous Programming]] and a `select` statement to branch on multiple channels and dispatch their data to the appropriate destination. This is really the core structure for an [[Event Loop]], which is a core model of many asynchronous programming models. This centralized dispatch model makes it easier to reason about the flow of data in an application across many sources and destinations. This was also essentially the model followed by the `DriverHost` in **Sundial**. One alternative, is to have a *global* name for each end of a channel that can be easily searched for in a codebase. I personally like this model as plain text search is a highly flexible way to navigate a codebase.