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

Dấu chia tốn 8 chu kỳ hay gần như 0? Tùy bạn viết

Nhân với chia đều là một phép toán nên tốn như nhau? Đo trên host ARM: chuỗi phép nhân số thực chạy 3,3 chu kỳ mỗi phép, nhưng chia số thực tốn 10,7 chu kỳ — gấp hơn ba lần, và gấp mười lần một phép cộng. Số nguyên udiv 8 chu kỳ so với mul 3,2. Nhưng chia cho hằng số thì trình biên dịch biến thành nhân, và lấy dư cho lũy thừa 2 thành phép AND — gần như miễn phí.

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

Đổi qua lại giữa hai tiến trình không hề đắt hơn giữa hai luồng — sách đã lỗi thời

Tưởng chuyển ngữ cảnh gần như tức thì, và chuyển giữa tiến trình đắt hơn hẳn giữa luồng vì phải xả TLB? Tôi đo bằng ping-pong qua pipe: mỗi lần chuyển ~8,5µs (hàng nghìn chu kỳ, không tức thì), và tiến trình bằng luồng (~1,0x) nhờ TLB gắn nhãn ASID. Một 'sự thật' sách giáo khoa đã lỗi thời vì phần cứng tiến hóa.

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

Dữ liệu đã sắp xếp giết cây tìm kiếm: khi O(log n) tụt xuống O(n)

BST tra cứu O(log n)? Chỉ khi cây cân bằng. Tôi đo thử: chèn dữ liệu ĐÃ sắp xếp vào một BST thường làm cây lệch thành chuỗi cao đúng bằng N (50.000), tra cứu chậm hơn std::map 461 lần và xây cây chậm 594 lần. Dữ liệu sắp xếp — thứ trông đẹp nhất — hóa ra là worst case, không phải best.

Cơ sở dữ liệu 03/09/2026 9 phút

Có index trên email mà WHERE lower(email) vẫn quét cả triệu hàng — và cú chữa hụt

Có index trên cột email nhưng WHERE lower(email)='...' vẫn quét cả bảng 7352 trang — một hàm bọc cột làm index cột trần vô dụng. Tạo index thẳng trên lower(email) thì cùng truy vấn còn 4 trang, nhanh gần 1800 lần. Nhưng đổi sang upper(email) là seq scan lại ngay, vì planner khớp biểu thức theo cú pháp chứ không theo ý nghĩa.

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

Ba chữ 'in system' trong thông báo lỗi tôi đọc lướt qua — và mất cả buổi gõ ulimit vô ích

'Too many open files' (EMFILE, mỗi tiến trình) và '...in system' (ENFILE, toàn hệ thống) chỉ khác ba chữ, nhưng cần hai cách chữa khác hẳn. Tôi chạm cái thứ hai, phản xạ vá cái thứ nhất, gõ ulimit cả buổi không xong. Đo thật hai giới hạn fd và bài học đọc kỹ lỗi.

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

Gộp lô đẩy throughput lên 2000 lần — nhưng 'lô càng to càng tốt' là cái bẫy

Tưởng tối ưu đồng bộ là làm mỗi lần đồng bộ nhanh hơn, hoặc batch càng lớn càng tốt? Tôi đo: gộp lô để giảm SỐ LẦN đồng bộ đẩy throughput từ 32 triệu lên 64,6 tỉ ops/giây — 2000 lần; nhưng độ trễ mỗi item cũng tăng ~94 lần theo kích thước lô. Batch tối ưu là cân bằng, không phải cực đại.