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

Tổng 1804 bài
Giải thuật 03/09/2026 8 phút

256 nhánh if-else chậm hơn bảng nhảy 121 lần — nhưng 4 nhánh thì không

Nhiều if-else cũng nhanh như switch, compiler lo hết? Tôi đo thử: chuỗi quét tuyến tính là O(N) — 256 nhánh mất 35,57ns còn bảng nhảy 0,24ns, chậm 121 lần. Nhưng ở 2-4 nhánh, if-else viết tay ngang bảng, và phân bố lệch làm branch prediction gần miễn phí. Đây là một điểm giao, không phải câu trả lời một chiều.

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

'Random Access Memory' mà truy cập ngẫu nhiên chậm 423 lần: sức mạnh prefetch

Tưởng truy cập RAM nào cũng như nhau (Random Access Memory), và prefetch chỉ giúp đọc stride 1? Tôi đo thử: duyệt mảng tuần tự 0,28ns/phần tử vs ngẫu nhiên 107ns — chênh 423 lần, vì prefetcher phần cứng chỉ đoán được mẫu ĐỀU; cái giết nó là tính không đoán được, không phải khoảng cách.

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

Thêm luồng CPU-bound làm chậm gấp 4 — 1843 lần bị tước CPU dù không luồng nào block

Tưởng context switch chỉ xảy ra khi luồng block, và sched_yield giúp chạy nhanh hơn? Tôi đo: workload CPU thuần không hề block vẫn bị tước CPU cưỡng bức (nivcsw 0→1843 khi luồng vượt số lõi), thời gian tăng gấp 2–4 lần — còn yield một mình chỉ là một syscall 150ns vô ích.

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

Gom 256 ghi rồi fsync một lần: nhanh 125 lần mà vẫn bền — 'an toàn hay nhanh' là câu hỏi sai

Tưởng phải chọn giữa an toàn (fsync mỗi ghi) và nhanh (không fsync)? Tôi đo: gom 256 ghi rồi fsync một lần cho 194 nghìn ghi/giây — nhanh 125 lần fsync-mỗi-ghi — mà vẫn bền. Chi phí fsync tính theo mỗi lần gọi, không theo lượng byte, nên group commit phá thế lưỡng nan.

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

sem_wait không phải lúc nào cũng là syscall — cùng một lời gọi chênh nhau 4.800 lần

Tưởng mỗi sem_wait là một syscall đắt nên phải né semaphore ở đường nóng? Tôi đo: khi bộ đếm còn dương, sem_wait chỉ là một phép atomic ~1,8 ns, chẳng vào nhân; chỉ khi phải ngủ mới tốn ~8.695 ns (futex + chuyển ngữ cảnh) — chênh gần 4.800 lần. Cái đắt là phải ngủ, không phải cái tên hàm.