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

Unix socket 'bỏ qua stack mạng nên nhanh hơn TCP' — huyền thoại không sống sót phép đo

Tưởng Unix socket nhanh hơn hẳn TCP loopback vì bỏ qua stack mạng? Tôi đo: độ trễ gần như hòa (~9,5µs mỗi chiều, cùng do chi phí đánh thức tiến trình), còn throughput TCP loopback thậm chí nhanh hơn. Unix socket vẫn hơn ở tính năng — không cổng, phân quyền file, truyền fd — chứ không phải tốc độ.

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

16 luồng chạy chậm hơn 1 luồng 16 lần: khi thêm luồng làm chương trình tệ đi

Tưởng thêm luồng luôn nhanh hơn và song song scale tuyến tính? Tôi đo hai workload trên cùng một máy: loại độc lập scale tới ~số lõi (4,86× ở 16 luồng), còn loại cùng ghi một biến scale ÂM — 16 luồng chỉ bằng 6% một luồng. Khác biệt duy nhất là có chia sẻ ghi hay không. Song song không tự động nhanh.

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

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.