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

Tiny allocator của Go: gộp object nhỏ để một byte chỉ tốn một byte

Object tí hon rất phổ biến nhưng cấp mỗi cái một slot 8-16 byte quá phí. Tiny allocator gộp object dưới 16 byte không con trỏ vào chung khối 16B. Đo thật: object 1-byte nén xuống đúng 1.0 B mỗi cái (thắng 8 lần), nhưng cùng cỡ mà có con trỏ thì không được gộp. Go 1.23.

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

GC tricolor mark-sweep của Go: gom rác mà chỉ dừng chương trình 62 micro-giây

Bộ thu gom rác của Go chạy đồng thời với chương trình, dùng ba màu để đánh dấu object sống. Đo thật: 10 chu kỳ GC chỉ dừng chương trình tổng 0.62 ms (62 micro-giây mỗi lần), trong khi công việc nền chạy 111 triệu lần. Cơ chế tricolor và write barrier. Go 1.23.

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

Write barrier trong Go: cái giá ẩn của GC đồng thời, đo tận assembly

GC chạy song song với chương trình bắt buộc phải có write barrier, nếu không sẽ thu nhầm object sống. Đo thật: assembly cho thấy ghi con trỏ có gcWriteBarrier còn ghi số thì không, và ghi con trỏ chậm 2.8 lần (0.636 vs 0.226 ns) vì kiểm cờ barrier. Bất biến tricolor và chi phí thật. Go 1.23.

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

Finalizer trong Go: vì sao runtime.SetFinalizer là công cụ nguy hiểm, đo thật cạm bẫy

SetFinalizer đăng ký hàm chạy khi object thành rác, nghe tiện để dọn tài nguyên nhưng đầy cạm bẫy. Đo thật: finalizer chỉ chạy sau GC (0 trước), bất đồng bộ (9998/10000), giữ object sống thêm một chu kỳ GC (19MB vs 0MB), và KHÔNG chạy nếu chương trình thoát trước GC. Go 1.23.