- Hai câu hỏi thường gặp trong phỏng vấn
- Hãy viết một chương trình đếm số từ trong một tệp văn bản
- Nút thắt hiệu năng của chương trình này nằm ở đâu?
- Mọi người thường trả lời là "đọc từ tệp", nhưng giờ điều đó không còn đúng nữa
- Điều này đúng vào 10-20 năm trước, nhưng đến năm 2022, việc đọc tuần tự từ đĩa đã rất nhanh (tác giả cũng không biết điều này cho đến khi tự kiểm thử)
- Phần gây nghẽn là xử lý/phân tích đầu vào và cấp phát vào bộ nhớ: tách thành từ, chuyển sang chữ thường, đếm tần suất bằng bảng băm, v.v.
- Khi thử nghiệm bằng Python/Go với tệp văn bản 413MB (bản Kinh Thánh King James được ghép lặp lại 100 lần)
- Việc đọc chỉ mất 0,1~0,2 giây, còn xử lý mất từ 7 giây đến 2 giây
- Kết luận là khi xử lý "dữ liệu lớn", đĩa I/O có thể không phải là nút thắt cổ chai
14 bình luận
Dù là truy cập tuần tự đi nữa, vẫn có những yếu tố bị ảnh hưởng như cách sử dụng pipeline I/O theo từng ngôn ngữ và từng thư viện, hay tần suất lập trình viên gửi yêu cầu qua API I/O, nên theo tôi để nói rằng I/O không còn là nút thắt cổ chai nữa thì cần có những tiền đề nhất định.
I/O mạng thì không phải là I/O à? hahaha
Dù có nhanh đến đâu thì I/O vẫn là I/O, đó là lý do vì sao khi lập trình luôn tồn tại những giải pháp riêng chỉ dành cho phần I/O.
Chuyển toàn bộ ổ đĩa big data sang NVMe SSD á? haha, rốt cuộc là tốn bao nhiêu tiền vậy...
Với tôi, người từng rất khổ sở vì disk I/O và phải làm công việc buộc các platter di chuyển ít nhất có thể, đây quả là một câu chuyện thú vị.
Trong bài có nhắc đến "sequential".
Nếu hoàn toàn không seek thì cũng chưa chắc là nói sai.
Đây là một thí nghiệm có tiền đề sai.
Vui lòng giải thích thêm.
Bản thân khái niệm nút thắt cổ chai là câu chuyện về thời gian mang tính tương đối.
So sánh tốc độ của CPU với I/O là đúng.
Dù I/O đã nhanh hơn trước đây, thì I/O cũng không thể nhanh hơn CPU.
Có thể là chỉ nạp vào bộ nhớ ảo bằng
mmap, còn trên thực tế thì CPU đọc mỗi khi thực hiện phép tính.Giao tiếp giữa CPU và mọi loại bộ nhớ (thanh ghi, bộ nhớ chính, đĩa) cũng đều là I/O.
https://stackoverflow.com/questions/5877797/how-does-mmap-work
Mình bắt đầu tò mò về tiêu chí dùng để phân định thế nào là dữ liệu lớn.
Thật thú vị.
Hôm nay lại học thêm được một điều mới.
URL của bình luận đầu tiên tại https://news.ycombinator.com/item?id=33751266 khá thú vị.
Napkin Math (một vài phép toán đơn giản)
I/O tuần tự đang gần như tiệm cận tốc độ bộ nhớ..
"Napkin math" đúng là một cái tên quá hấp dẫn. Nghe nói khi tạo ra UTF-8, Rob Pike đã nguệch ngoạc lên một chiếc khăn ăn để giải thích thì phải.