Worker Pool
🧠 1. Worker Pool là gì?
Worker Pool là một mô hình xử lý song song trong đó:
Có một hàng đợi công việc (jobs queue).
Một số lượng cố định các goroutine (workers) sẽ lấy job từ hàng đợi và xử lý.
Tối ưu hiệu năng & giới hạn tài nguyên – thay vì tạo hàng ngàn goroutine, bạn chỉ tạo 10-100 workers.
⚠️ Nếu không dùng Worker Pool, bạn có thể tạo quá nhiều goroutine, dẫn đến OOM (Out of Memory) hoặc CPU nghẽn.
⚙️ 2. Kiến trúc tổng quan
🛠️ 3. Code mẫu chuẩn Senior
🔬 4. Giải thích chi tiết
jobs chan int
Hàng đợi chứa các công việc
results chan string
Kết quả trả về sau khi xử lý
wg sync.WaitGroup
Chờ tất cả worker hoàn thành
close(jobs)
Báo cho workers biết không còn job mới
range jobs
trong worker
Worker chỉ dừng lại khi jobs
bị đóng
🧱 5. Ưu điểm & Khi nào dùng Worker Pool
✅ Khi dùng:
Tải cao, job xử lý nhiều (VD: gửi email, resize ảnh, crawl web)
Cần kiểm soát tài nguyên (không tạo quá nhiều goroutine)
Job tương đối độc lập
⚠️ Tránh dùng nếu:
Job quá nhỏ → overhead goroutine còn tốn hơn
Cần realtime thấp (delay vì chờ worker rảnh)
💣 6. Những lỗi thường gặp
wg.Done()
thiếu
Worker không giảm counter → chương trình treo
Dùng defer wg.Done()
sớm nhất có thể
Không close(jobs)
Workers không bao giờ kết thúc
Luôn đóng channel sau khi gửi xong jobs
Không giới hạn worker
Tạo quá nhiều goroutine
Dùng const workerCount
cố định số lượng
🧠 7. Bonus – Pattern nâng cao: Context timeout
Khi bạn cần timeout job hoặc hủy giữa chừng:
📌 Tổng kết
Tạo pool cơ bản
⭐⭐⭐
Xử lý WaitGroup
⭐⭐⭐⭐
Kết hợp Context
⭐⭐⭐⭐⭐
Hiểu tại sao dùng pool
⭐⭐⭐⭐⭐⭐
Last updated