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

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

Chia đúng bằng số phần tử cho mỗi lõi mà một luồng vẫn cày gấp 21,7 lần: bẫy cân bằng tải

Tưởng chia đều số phần tử cho mỗi lõi là cân bằng tải? Tôi đo: khi mỗi phần tử tốn khác nhau, chia khối làm một luồng thành kẻ tụt hậu (lệch 21,7 lần), tổng thời gian kẹt ở luồng chậm nhất chứ không phải trung bình; chia xen kẽ san đều gần miễn phí. Và một cái rào ngầm suýt che mất toàn bộ hiện tượng khi tôi đo.

Hệ điều hành 03/09/2026 8 phút

Tôi ghim 8 luồng vào một lõi 'cho gọn' — và vứt mất 4/5 sức mạnh của máy

Tám luồng bận không ghim: nhân tự trải ra tám lõi khác nhau, 854.562 đơn vị công việc. Ghim hết vào một lõi tưởng 'kiểm soát tốt' nhưng chỉ được 165.906 — bằng 1/5, chín lõi ngồi không. Affinity tốt cho một luồng nóng nhưng phản tác dụng khi gom nhiều luồng song song.

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

Đổi một biến chung lấy biến riêng mỗi luồng: nhanh 385 lần, chỉ đắt thêm 4%

Tưởng thread-local storage miễn phí như biến toàn cục, hoặc chậm không đáng dùng? Tôi đo ra ở giữa: truy cập TLS chỉ đắt hơn global 4% (một lệnh đọc con trỏ luồng), nhưng dùng TLS làm bộ đếm cục bộ nhanh hơn atomic chung 385 lần vì xóa sạch tranh chấp. Và chính phép đo TLS suýt cho tôi một con số rác 13.000 lần.

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

Mỗi luồng ghi biến riêng, không chia sẻ gì — vẫn chậm gấp đôi: bí ẩn false sharing

Tưởng hai biến khác nhau, mỗi luồng ghi biến của riêng mình thì không thể ảnh hưởng nhau? Tôi đo: chúng làm nhau chậm 2,05 lần ở 8 luồng vì tình cờ nằm chung một dòng cache 64 byte — false sharing. Căn lề mỗi biến sang một dòng riêng thì nhanh gấp đôi, dù logic không đổi một chữ. Bug hiệu năng vô hình trong mã nguồn.

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

Vòng lặp sleep(1ms) trôi 61ms sau 200 nhịp — timer định kỳ đúng phải dùng kỳ hạn tuyệt đối

Tưởng lặp nanosleep(period) là timer định kỳ chính xác? Tôi đo: nó trôi 61ms sau 200 tick 1ms (lệch 30,6% mỗi chu kỳ!) vì sai số dồn lại, còn timerfd/setitimer giữ kỳ hạn tuyệt đối nên drift không tích lũy (setitimer mất đúng 0,1% tick). Khác biệt là bản chất.

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

std::async chạy 20.000 việc nhỏ chậm hơn tuần tự 1724 lần — API đẹp không đổi được vật lý

Tưởng future/async tự động nhanh và rẻ? Tôi đo bằng C++: future.get() là một điểm đồng bộ chặn tới khi promise set, và std::async mặc định tạo một luồng mới cho mỗi task — chạy hai vạn task nhỏ bằng async chậm hơn tuần tự 1724 lần. Future tiện cho một kết quả, không phải phép màu song song.