Lập trình Go 22/09/2026 10 phút

Semaphore có trọng số trong Go: giới hạn tài nguyên khi mỗi việc tốn khác nhau

golang.org/x/sync/semaphore cho phép mỗi lần Acquire tốn số đơn vị khác nhau — điều channel làm semaphore không diễn đạt được. Đo thật: 12 việc trọng số 1/3/5 với sức chứa 10 giữ đúng giới hạn, và Acquire nhanh hơn channel-semaphore ~2 lần. Khi nào cần. Go 1.23.

Lập trình Go 22/09/2026 10 phút

Rate limiting bằng token bucket trong Go: giới hạn tốc độ, không phải số đồng thời

golang.org/x/time/rate dùng thuật toán token bucket để giới hạn số sự kiện mỗi giây, cho phép burst ngắn. Đo thật: 200 sự kiện ở 50/giây hội tụ chính xác 50,2/giây, burst 3 cho 3 lần đầu qua ngay, Reserve báo trước delay 0,50s. Khác semaphore thế nào. Go 1.23.

Lập trình Go 22/09/2026 11 phút

singleflight trong Go: gộp 100 lời gọi trùng thành 1 để chống thundering herd

Khi cache miss một key nóng, 100 request cùng lao vào gọi DB. singleflight gộp chúng thành một lời gọi thật, 99 kia chờ và dùng chung kết quả. Đo thật: 100 goroutine cùng key khiến hàm đắt chạy đúng 1 lần thay vì 100. Cơ chế, DoChan, và cạm bẫy lỗi lan. Go 1.23.

Lập trình Go 22/09/2026 11 phút

Worker pool và backpressure trong Go: vì sao 1 goroutine mỗi job là công thức sập

Số worker cố định + hàng đợi giới hạn giúp hệ thống chậm lại khi quá tải thay vì sập. Đo thật: pool giữ goroutine ở 6 trong khi cách ngây thơ 1-goroutine-mỗi-job bùng lên 102, và hàng đợi đầy chặn producer 89 lần (backpressure). Cơ chế và vì sao quan trọng. Go 1.23.