28 điểm bởi xguru 2022-11-28 | 14 bình luận | Chia sẻ qua WhatsApp
  • 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

 
is9117 2022-12-01

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.

 
yuriwin 2022-11-30

I/O mạng thì không phải là I/O à? hahaha

 
yuriwin 2022-11-30

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.

 
love7peace 2022-11-29

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...

 
loblue 2022-11-28

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.

 
deokim 2022-11-28

Đây là một thí nghiệm có tiền đề sai.

 
roxie 2022-11-29

Vui lòng giải thích thêm.

 
deokim 2022-12-05

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.

 
deokim 2022-12-05

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

 
park2348190 2022-11-28

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.

 
nicewook 2022-11-28

Thật thú vị.

 
jungmin1237 2022-11-28

Hôm nay lại học thêm được một điều mới.

 
xguru 2022-11-28

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ớ..

 
nicewook 2022-11-28

"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.