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 9 phút

Map evacuation trong Go: mở rộng map mà không gây khựng, đo tận nanosecond

Khi map quá đầy, số bucket phải gấp đôi và mọi entry phải chuyển chỗ. Làm một lần sẽ khựng O(n). Đo thật: chèn 2 triệu entry, insert chậm nhất chỉ 0.6 ms — nhỏ hơn 330 lần so với 200 ms nếu chuyển hết một lần. Cơ chế evacuation tăng dần và load factor 6.5. Go 1.23.

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

Streaming JSON lớn trong Go: json.Decoder thay vì Unmarshal cả tệp

json.Unmarshal cần toàn bộ dữ liệu trong RAM rồi dựng mọi struct cùng lúc — bộ nhớ tỉ lệ với kích thước tệp, tệp GB làm sập app. json.Decoder đọc lười từng phần tử, giữ bộ nhớ hằng số. Đo thật trong Go: xử lý tệp JSON 41.6 MB, Unmarshal tốn +142.5 MB heap, streaming chỉ +2.3 MB — cùng kết quả.

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

False sharing trong Go: hai biến không liên quan mà làm chậm nhau 30 lần

Tám goroutine tăng tám counter riêng, không chia sẻ dữ liệu — nhưng chậm 30 lần vì chúng nằm chung một cache line. Đo thật: 830 ms so với 27.5 ms sau khi chèn đệm để mỗi counter chiếm một cache line 64 byte. Cơ chế cache coherency và khi nào cần thêm padding. Go 1.23.