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

CAS và cấu trúc lock-free trong Go: một stack không khóa, và sự thật rằng nó chậm hơn mutex

Xây một stack lock-free bằng vòng lặp Compare-And-Swap. Đo thật: nó đúng đắn (10000 phần tử không mất, -race sạch) nhưng dưới tranh chấp cao lại chậm hơn mutex ~3,5 lần vì bão retry. Giá trị của lock-free là bảo đảm tiến triển, không phải tốc độ. Go 1.23.

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

Hàng đợi lock-free Michael-Scott trong Go: mổ xẻ, và vì sao channel vẫn thắng

Xây một hàng đợi lock-free chuẩn Michael-Scott với head/tail riêng, node giả và cơ chế giúp đỡ. Đo thật: nó đúng đắn (8000 phần tử, FIFO, -race sạch) nhưng dưới tranh chấp chậm hơn channel ~3 lần. Vì sao queue khó hơn stack, và khi nào channel là câu trả lời. Go 1.23.

Lập trình Go 22/09/2026 5 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 6 phút

Devirtualization trong Go: khi lời gọi interface biến thành một phép cộng

Nếu compiler chứng minh được kiểu động sau interface lúc biên dịch, nó thay dispatch động bằng lời gọi trực tiếp rồi inline luôn. Đo thật: một lời gọi interface co xuống còn một lệnh ADD (không itab, không CALL), nhanh hơn dispatch động ~3,8 lần. Điều kiện để nó xảy ra. Go 1.23.