Golang concurrency pattern thực dụng: goroutine, channel và context
Các pattern Go concurrency hay dùng nhất: worker pool, fan-out/fan-in, timeout với context và graceful shutdown.
Context là cơ chế cancel chuẩn
Mọi goroutine nên nhận context.Context làm tham số đầu tiên. Khi context bị cancel (timeout, signal, hoặc parent cancel), goroutine phải dừng sạch.
Dùng context.WithTimeout cho HTTP call và DB query để không để goroutine hang vô tận khi upstream chậm.
- context.WithTimeout cho I/O ngoài
- select với ctx.Done() trong vòng lặp
- WaitGroup để chờ goroutine xong trước shutdown
- Buffered channel để tránh goroutine leak
Bước tiếp theo
Nếu áp dụng vào dự án thật, hãy bắt đầu bằng phiên bản nhỏ nhất có thể đo được, ghi lại quyết định kỹ thuật, rồi cải tiến dựa trên log và phản hồi người dùng.