Concurrency di Go Dari Basic hingga Advanced
Daftar Isi
1. Pengenalan Concurrency
Apa itu Concurrency?
Mengapa Go Unggul dalam Concurrency?
Konsep Dasar
2. Goroutines - Basic
Apa itu Goroutine?
Hands-On: Goroutine Sederhana
Hands-On: Anonymous Goroutines
3. Channels - Basic
Apa itu Channel?
Hands-On: Channel Dasar
Hands-On: Channel sebagai Synchronization
Channel Operations
Hands-On: Ping-Pong dengan Channels
4. Channel Operations
Closing Channels
Range over Channels
Hands-On: Producer-Consumer Pattern
5. Select Statement
Apa itu Select?
Hands-On: Basic Select
Hands-On: Select dengan Default
Hands-On: Timeout Pattern
Hands-On: Ticker & Timer
6. Buffered Channels
Perbedaan Unbuffered vs Buffered
Hands-On: Buffered Channels
Hands-On: Channel Capacity & Length
Use Case: Semaphore Pattern
7. WaitGroups
Apa itu WaitGroup?
Hands-On: Basic WaitGroup
Hands-On: WaitGroup dengan Error Handling
8. Mutex & RWMutex
Apa itu Mutex?
Race Condition Demo
Hands-On: Mutex Solution
Hands-On: RWMutex (Read-Write Mutex)
Best Practices
9. Atomic Operations
Apa itu Atomic?
Hands-On: Atomic Counter
Hands-On: Atomic Operations Lengkap
Hands-On: Atomic Value (Any Type)
Performance Comparison
10. Worker Pool Pattern
Konsep Worker Pool
Hands-On: Basic Worker Pool
Hands-On: Advanced Worker Pool dengan Error Handling
11. Pipeline Pattern
Konsep Pipeline
Hands-On: Simple Pipeline
Hands-On: Data Processing Pipeline
Hands-On: Pipeline dengan Cancellation
12. Fan-Out Fan-In Pattern
Konsep Fan-Out Fan-In
Hands-On: Fan-Out Fan-In
Hands-On: Advanced Fan-Out dengan Load Balancing
13. Context Package
Apa itu Context?
Hands-On: Context dengan Cancellation
Hands-On: Context dengan Timeout
Hands-On: Context dengan Deadline
Hands-On: Context Values
Hands-On: Real-World HTTP Request dengan Context
14. Rate Limiting
Konsep Rate Limiting
Hands-On: Simple Rate Limiter dengan Ticker
Hands-On: Bursty Rate Limiter
Hands-On: Token Bucket Rate Limiter
Hands-On: Rate Limiter dengan golang.org/x/time/rate
15. Error Handling dalam Concurrency
Challenge dalam Error Handling
Hands-On: Error Handling dengan Channels
Hands-On: errgroup Package Pattern
Hands-On: Panic Recovery dalam Goroutines
Hands-On: Timeout Pattern dengan Error
16. Advanced Patterns
16.1 Semaphore Pattern
16.2 Future/Promise Pattern
16.3 Bounded Parallelism
16.4 Or-Channel Pattern
16.5 Tee-Channel Pattern
16.6 Bridge-Channel Pattern
16.7 Or-Done Channel Pattern
16.8 Replicated Requests Pattern
16.9 Queuing Pattern
16.10 Heartbeat Pattern
Best Practices & Common Pitfalls
✅ Best Practices
❌ Common Pitfalls
Performance Tips
1. Profile Concurrent Code
2. Right-size Worker Pools
3. Use Buffered Channels Wisely
4. Prefer Atomic for Simple Counters
5. Context Overhead
Testing Concurrent Code
Test dengan Race Detector
Test dengan Timeout
Resources & Further Learning
Official Documentation
Books
Tools
Summary
Key Takeaways
When to Use What
Use Case
Tool
Remember
Last updated