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

Thêm luồng thứ hai, thông lượng sụp 8 lần: và cả sau khi chia khóa nó vẫn tụt vì một kẻ giết vô hình

Thêm luồng vào một khóa chung làm thông lượng SỤP: 226 xuống 27 triệu ops/giây khi lên 2 luồng — mở rộng âm. Chia nhỏ khóa vẫn tụt sau 2 luồng vì chia sẻ giả (các biến chung dòng cache). Chỉ khi đệm mỗi luồng ra riêng một dòng cache mới scale gấp 6. 'Song song' cần độc lập cả về khóa lẫn dòng cache.

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

Cùng một vòng lặp: đo một lần ra 0,459ms, nhưng đuôi tới 2,072ms — và số đẹp là số nói dối

Cùng một vòng lặp: đo một lần ra 0,459ms nhưng đuôi tới 2,072ms (gấp 4 lần); -O2 gấp 2 tỉ vòng thành 0,000042ms (bất khả — trình biên dịch xóa vòng lặp). Bài chốt sê-ri Hệ điều hành: một phép đo là giả thuyết phải tra hỏi, không phải chân lý để tin — số quá đẹp đáng nghi ngang số quá xấu.

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.

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

Cùng một vòng read() chạy ngon với pipe lại treo cứng với socket: bẫy ngữ nghĩa ẩn sau chữ ký hàm giống hệt

Unix socket mang tiếng 'socket' nhưng không hề chậm hơn pipe: 12597 so với 10791 MB/s vì AF_UNIX đi thẳng trong nhân, không qua mạng. Khác biệt thật là ngữ nghĩa — SOCK_STREAM gộp byte và báo EOF, SOCK_DGRAM giữ ranh giới gói và không có EOF, nên một vòng read() bê nguyên sang datagram sẽ treo vô tận.

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

Chương trình dùng 4 giây CPU trong 1 giây thật: con số '400%' nghe bất khả mà lại đúng

Bốn luồng bận báo %CPU = 400% — dùng 4 giây CPU trong 1 giây tường, nghe bất khả nhưng đúng: thời gian CPU cộng dồn qua các lõi. sleep dùng 0% CPU dù wall trôi 1 giây; I/O nặng sys 0,64 lớn hơn user 0,36. 'Mất bao lâu' là câu hỏi mơ hồ tới khi bạn hỏi 'wall hay CPU'.

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

Working-set nhích từ 80MB lên 150MB, tốc độ rơi 1.500 lần: cái vực thrashing ẩn ngay sau ngưỡng RAM

Working-set 80MB trong 100MB RAM: 0 major fault, 900.000 MB/s. Đẩy lên 150MB (tràn 54MB ra swap): 9.000 major fault mỗi lần quét, còn 600 MB/s — chậm 1.500 lần. Swap không phải 'thêm RAM' mà là vùng tràn chậm gấp nghìn lần, và cái vực đó vô hình cho tới đúng ngưỡng working-set gặp RAM.