Đồng thời và song song: đo thật
Sê-ri 45 bài đo thật về lập trình đồng thời và song song bằng C/pthreads/atomic trong container: chi phí luồng, khóa, atomic, false sharing, scaling — mỗi bài một phép đo, một đo hớ, một sơ đồ.
7/45 phần đã đăng
Giải thuật
1
Luồng và tiến trình: chi phí tạo
Tưởng tạo luồng gần như miễn phí, và fork đắt gấp trăm lần thread. Đo ra cả hai đều sai: tạo+join một luồng rỗng mất ~47µs, fork+waitpid ~82µs — fork chỉ 1,8 lần thread nhờ copy-on-write. Không cái nào miễn phí. Đo thật.
03/09/2026
· 7 phút đọc
2
Đo chi phí chuyển ngữ cảnh
Tưởng chuyển ngữ cảnh gần như tức thì, và giữa tiến trình đắt hơn hẳn giữa luồng vì xả TLB. Đo ra: mỗi lần chuyển ~8,5µs (không tức thì), và tiến trình bằng luồng (~1,0x) nhờ TLB gắn nhãn ASID. Đo thật.
03/09/2026
· 7 phút đọc
3
Mutex và chi phí khóa
Tưởng khóa luôn đắt, hoặc mutex tranh chấp thì mỗi thao tác tốn ~8,5µs vì luồng phải ngủ. Đo ra tinh tế hơn: không tranh chấp chỉ 3,3ns (futex), tranh chấp CS ngắn ~25ns (spin), chỉ CS dài mới ngủ. Cái đắt là tranh chấp. Đo thật.
03/09/2026
· 7 phút đọc
4
Atomic và CAS
Tưởng atomic miễn phí, lock-free nên không bị tranh chấp, luôn nhanh hơn mutex nhiều lần. Đo ra cả ba đều lệch: fetch_add tranh chấp vẫn chậm 10 lần vì cache nảy, và vòng CAS 8 luồng còn chậm hơn cả mutex. Đo thật.
03/09/2026
· 7 phút đọc
5
False sharing
Tưởng hai biến khác nhau, mỗi luồng ghi biến riêng thì không ảnh hưởng nhau. Đo ra chúng làm nhau chậm 2 lần ở 8 luồng vì nằm chung một dòng cache — false sharing. Căn lề 64B tách dòng thì nhanh gấp đôi. Đo thật.
03/09/2026
· 7 phút đọc
6
Contention và scaling
Tưởng thêm luồng luôn nhanh hơn, song song scale tuyến tính. Đo ra hai đường cong trái ngược: workload độc lập scale tới ~số lõi (4,86x), workload tranh chấp scale ÂM — 16 luồng chỉ bằng 6% một luồng. Đo thật.
03/09/2026
· 7 phút đọc
7
Spinlock vs mutex
Tưởng spinlock luôn nhanh hơn mutex vì không vào nhân. Đo ra có điều kiện: ở tranh chấp thấp spinlock nhanh 1,7 lần, nhưng đông luồng hoặc quá số lõi thì spinlock đốt CPU và chậm hơn mutex 7-36 lần. Không có cái luôn thắng. Đo thật.
03/09/2026
· 7 phút đọc
Còn 38 phần nữa sẽ lần lượt được đăng.