The Go programming language was instrumental in bringing the Communicating Sequential Processes (CSP) concurrency model into widespread use. In the CSP model, channels are usually unbuffered and act not just as a means of communication, but also for synchronization. That is, sending or receiving blocks until the other side is ready, and then the value is moved from one thread to another atomically.