Bài viết mới nhất

Tổng 2300 bài
Lập trình Go 22/09/2026 9 phút

Build tags trong Go: một mã nguồn, nhiều binary theo điều kiện biên dịch

Build tags cho phép chọn tệp nào được biên dịch theo hệ điều hành, kiến trúc, hoặc cờ tùy biến. Đo thật trong Go 1.23 hai cơ chế: chỉ thị //go:build với biểu thức logic, và hậu tố tên tệp _GOOS.go — cùng go list chứng minh chính xác tệp nào lọt vào build.

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

Bloom filter tự cài trong Go: kiểm "có thể có" bằng vài bit

Bloom filter là cấu trúc xác suất trả lời phần tử có thể có trong tập hay chắc chắn không — chỉ bằng một mảng bit và k hàm băm, không lưu phần tử. Đo thật khi tự cài trong Go: 1 triệu phần tử, 0 âm tính giả, dương tính giả đúng 1% như thiết kế, và bộ nhớ 1.20 MB so với 56.1 MB của set thường.

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

Memory-mapped file (mmap) trong Go: đọc tệp lớn không qua heap

os.ReadFile sao chép toàn bộ tệp vào heap Go. mmap ánh xạ tệp thẳng vào không gian địa chỉ, đọc như slice byte, để HĐH nạp trang theo nhu cầu — không copy, không heap, không áp lực GC. Đo thật trong Go: đọc tệp 200 MB, ReadFile tốn +191 MB heap và 125ms, mmap chỉ +0 MB heap và 31ms.

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 22/09/2026 9 phút

Tổng kết Caching: gom 11 phép đo thành một hàm, DB giảm 19 lần và Redis giảm 60 lần

Phần cuối loạt Caching gom mọi thứ đã đo thành một hàm đọc duy nhất — L1 trong tiến trình, singleflight, khoá SET NX, dấu vắng mặt, TTL có nhiễu — rồi đo nó cạnh cache-aside ngây thơ dưới cùng một lưu lượng: 32 người đọc song song, Zipf trên 5000 key, 5% là bot quét id không tồn tại. Kết quả: truy vấn database từ 101.739 xuống 5.300 (đúng sàn lý thuyết), lưu lượng Redis từ 100% xuống 0,1%, p99 từ 0,283ms xuống 0,001ms — đổi lại đuôi khởi động nguội xấu hơn, 388,7ms so với 21,5ms. Kèm khung quyết định và checklist rà soát trước khi lên production.