Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2312 bài viết · Website
Lập trình Go 22/09/2026 11 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 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.

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

Coverage nâng cao trong Go: đo phủ theo hàm, và vì sao 100% không đủ

go test -cover cho một con số tổng, nhưng không nói phần nào chưa phủ. go tool cover -func chỉ ra chính xác hàm/nhánh nào yếu để thêm test. Và cạm bẫy lớn nhất: 100% phủ dòng không bằng test tốt. Đo thật: coverage 75% lên 87.5% có mục tiêu, và một test 100% phủ dòng vẫn để lọt bug giá âm -500.

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

Compiler directive //go: trong Go: từ embed tiện lợi đến linkname nguy hiểm

Chú thích //go: là công tắc điều khiển compiler và linker. Đo thật: go:embed nhúng file vào binary lúc build, go:linkname gọi được hàm runtime riêng (runtime.nanotime), và một khoảng trắng thừa sau // khiến directive bị bỏ qua âm thầm. Cái nào an toàn, cái nào phá an toàn bộ nhớ. Go 1.23.

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

Closure trong Go biểu diễn thật thế nào: khi nào miễn phí, khi nào tốn 2 cấp phát

Một func value là con trỏ tới {con trỏ mã, các biến bắt}. Đo thật: closure dùng tại chỗ 0 cấp phát dù bắt biến, nhưng bắt biến rồi trả ra tốn 24 B và 2 cấp phát; gọi qua con trỏ hàm ~2x gọi trực tiếp. Đọc assembly thanh ghi ngữ cảnh. Go 1.23.