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.

2300 bài viết · Website
Giải thuật 03/09/2026 9 phút

Chạy hoàn hảo trên laptop, hỏng trên server ARM: cái bẫy 20 năm của double-checked locking

Tưởng kiểm null rồi khóa rồi kiểm lại là đủ, và DCL chỉ là mẹo tránh khóa? Tôi đo: fast-path đọc atomic không khóa nhanh 314 lần always-lock — nhưng DCL đúng bắt buộc có rào bộ nhớ (acquire/release), thiếu nó luồng khác thấy con trỏ đã publish mà object chưa khởi tạo xong. Một bug ẩn kỹ tới mức Java mất nhiều năm mới thừa nhận.

Giải thuật 03/09/2026 8 phút

Cùng O(n) mà chậm 442 lần: bí mật cache của mảng vs linked list

Tưởng duyệt mảng và danh sách liên kết tốn như nhau vì cùng O(n)? Tôi đo thử: duyệt 20 triệu phần tử, mảng 0,24ns/phần tử còn linked list 104ns — chậm 442 lần, vì mỗi con trỏ next là một cache miss còn mảng thì được prefetch. Big-O đếm số thao tác, không đếm giá mỗi thao tác.

Giải thuật 03/09/2026 8 phút

printf không phải một syscall mỗi lần: đệm stdio nhanh hơn 116 lần

Tưởng mỗi putc/fprintf là một syscall, và stdout luôn được đệm như nhau? Tôi đo thử: stdio đệm trong user-space nên có đệm nhanh hơn không đệm 116 lần (10 triệu write() vs 2442); và mặc định đệm khác nhau tùy stdout là file, pipe hay terminal — thứ quyết định cả tốc độ lẫn output có mất khi crash.