# The Comprehensive Guide to Concurrency in Golang ![rw-book-cover](https://miro.medium.com/v2/resize:fit:800/1*sGMKM87adOCwpHagRmqEIA.jpeg) ## Metadata - Author: [[Brandon Wofford]] - Full Title: The Comprehensive Guide to Concurrency in Golang - Category: #articles - Summary: Go, or Golang, is known for its unique approach to concurrency, using Goroutines and Channels to simplify concurrent programming. The article explains the differences between concurrency and parallelism, highlighting the advantages and challenges of using Go's concurrency model. It also offers best practices for writing efficient and reliable concurrent applications in Go. - URL: https://bwoff.medium.com/the-comprehensive-guide-to-concurrency-in-golang-aaa99f8bccf6 ## Highlights - At their core, Goroutines are functions that run concurrently with other Goroutines. They are not managed by the operating system but by the Go runtime itself. ([View Highlight](https://read.readwise.io/read/01jv7zn0vjm49dr4yx6ez0bgkb)) - A single OS thread can manage multiple Goroutines, thanks to Go’s internal scheduler. ([View Highlight](https://read.readwise.io/read/01jv7znspfpgy9th87h6xzwp88)) - Channels in Go are a conduit through which Goroutines communicate and synchronize execution. They can transmit data of a specified type, allowing Goroutines to share information in a thread-safe manner. Notably, they align with Go’s philosophy of “Do not communicate by sharing memory; instead, share memory by communicating.” ([View Highlight](https://read.readwise.io/read/01jv7zq7g40jbc83hqxq3kc629)) - Fan-Out Fan-out is a pattern where a single channel’s output is distributed among multiple Goroutines to parallelize CPU usage and I/O. ([View Highlight](https://read.readwise.io/read/01jv7zthydkegxdpcmejeq7mcy)) - Fan-In Fan-in is a pattern where data from multiple channels is consolidated into a single channel. You could use this pattern to collect and process data from multiple sources. ([View Highlight](https://read.readwise.io/read/01jv7ztv2mdjhx1qeen63p2b11))