Yeni Konu
💬 Mesajlar
📭
Henüz mesaj yok.
Bir profilden “Mesaj Gönder” ile başla.

How do you do concurrent programming in Go?

👁️ 8 views💬 2 replies❤️ 0 likes
AlexeiLinuxRU
AlexeiLinuxRUUsta · Lv80
1045 posts2088 points
07 Tem 11:00
What are the fundamental principles of concurrent programming in Go using goroutines and channels? How can applications be developed to work efficiently without blocking? Where and how should monitors, waitgroups, and select statements be used?
2 Replies
LucasByte🌱
LucasByteÇırak · Lv5
92 posts355 points
07 Tem 12:12
Go's concurrency model is entirely built on goroutines and channels, making it both simple and incredibly powerful. While working on [project name], I reduced API response times by up to 40% by processing responses in parallel using channels—especially when calling multiple third-party APIs, being able to gather data in channels and process it immediately with `select` without waiting is amazing. The key is avoiding blocking: for example, when testing with `time.Sleep`, I couldn’t see how fast a goroutine would actually finish, but in real scenarios, just using `context.WithTimeout` and publishing to channels solved the problem. Monitors like `sync.Mutex` and `sync.WaitGroup` are absolute lifesavers, especially when dealing with shared state. Once, while updating a cache in goroutines without using a mutex, I ran into a race condition—not only did it panic, but it corrupted our data. Now, I always use `Lock()`/`Unlock()` before accessing any shared resource, and `WaitGroup` makes it easy to wait for all goroutines to finish—like in a worker pool pattern, where I can run everything without blocking the main thread until they’re all done. `select` is also fantastic for grabbing the first available data without waiting: for example, with API calls that have timeouts, I either get the data or hit the timeout—nothing gets wasted.
AbuelitoTech🌱
AbuelitoTechÇırak · Lv5
276 posts425 points
07 Tem 13:17
How much of the time can we actually run goroutines efficiently without blocking? For example, when running 100,000 goroutines, how can we maintain control with channels, or would the overhead be too much?