- คำถาม 2 ข้อที่มักถูกถามในการสัมภาษณ์
- ลองเขียนโปรแกรมนับจำนวนคำในไฟล์ข้อความ
- คอขวดด้านประสิทธิภาพของโปรแกรมนี้อยู่ที่ส่วนไหน?
- หลายครั้งคนมักตอบว่า "การอ่านจากไฟล์" แต่ตอนนี้ไม่ใช่อีกต่อไป
- เมื่อ 10-20 ปีก่อนอาจใช่ แต่ ณ ปี 2022 การอ่านข้อมูลแบบลำดับจากดิสก์ทำได้เร็วมากแล้ว (ผู้เขียนเองก็ไม่รู้มาก่อนจนได้ลองทดสอบ)
- ส่วนที่เป็นคอขวดคือการประมวลผล/พาร์สอินพุตและจัดสรรหน่วยความจำ: งานอย่างการแยกเป็นคำ แปลงเป็นตัวพิมพ์เล็ก และนับความถี่ด้วยแฮชเทเบิล
- เมื่อลองทดสอบไฟล์ข้อความขนาด 413MB (ไฟล์ที่นำพระคัมภีร์ฉบับคิงเจมส์มาต่อกัน 100 ครั้ง) ด้วย Python/Go
- การอ่านใช้เวลาเพียง 0.1-0.2 วินาที ส่วนการประมวลผลใช้เวลาตั้งแต่ 7 วินาทีถึง 2 วินาที
- สรุปคือ ในการประมวลผล "Big Data" ดิสก์ I/O อาจไม่ใช่คอขวด
14 ความคิดเห็น
ต่อให้เป็นการเข้าถึงแบบ sequential ก็ยังมีส่วนที่ได้รับผลกระทบตามแต่ละภาษาและแต่ละไลบรารี เช่น วิธีใช้ IO pipe หรือความถี่ที่นักพัฒนาเรียกใช้ IO API ดังนั้นการจะบอกว่า I/O ไม่ใช่คอขวดอีกต่อไป ผมมองว่าจำเป็นต้องมีเงื่อนไขตั้งต้นกำกับไว้
แล้ว network io ไม่นับเป็น io เหรอ? 555
ไม่ว่าจะเร็วขึ้นแค่ไหน I/O ก็คือ I/O นั่นจึงเป็นเหตุผลว่าทำไมเวลาเขียนโปรแกรมถึงมีโซลูชันที่มีไว้สำหรับส่วน I/O โดยเฉพาะแยกต่างหาก
จะให้เปลี่ยนดิสก์ Big Data ทั้งหมดเป็น NVMe SSD งั้นเหรอ? 555 แล้วมันจะราคาเท่าไหร่กันล่ะ...
ในฐานะคนที่ต้องทำงานซึ่งทรมานกับ disk I/O อย่างมาก และต้องพยายามทำให้ platter เคลื่อนที่ให้น้อยที่สุด เรื่องนี้ก็น่าทึ่งดีนะครับ
ในเนื้อหาบทความมีพูดถึงคำว่า "sequential" อยู่ด้วยนะครับ
ถ้าไม่มีการ seek เลย ก็อาจจะไม่ใช่เรื่องที่ผิดเสียทีเดียวก็ได้ครับ
เป็นการทดลองที่ตั้งสมมติฐานผิด
ช่วยอธิบายเพิ่มเติมหน่อยครับ
คอขวดนั้นโดยตัวมันเองเป็นเรื่องของเวลาเชิงสัมพัทธ์
การเปรียบเทียบความเร็วของ CPU กับ I/O จึงถูกต้อง
ต่อให้ I/O จะเร็วขึ้นกว่าสมัยก่อน I/O ก็ไม่สามารถเร็วกว่า CPU ได้
อาจเป็นการใช้
mmapเพื่อเพียงโหลดไว้ในหน่วยความจำเสมือน แล้วในความเป็นจริง CPU จะอ่านทุกครั้งที่ทำการคำนวณก็ได้การสื่อสารระหว่าง CPU กับหน่วยความจำทั้งหมด (รีจิสเตอร์, หน่วยความจำหลัก, ดิสก์) ก็ล้วนเป็น I/O ทั้งหมด
https://stackoverflow.com/questions/5877797/how-does-mmap-work
ชักอยากรู้ขึ้นมาว่าเกณฑ์ที่ใช้ตัดสิน Big Data คืออะไรกันแน่
น่าสนใจครับ
วันนี้ก็ได้เพิ่มพูนความรู้อีกหนึ่งอย่าง
URL ของคอมเมนต์แรกที่ https://news.ycombinator.com/item?id=33751266 น่าสนใจดีนะครับ
Napkin Math (คณิตศาสตร์ง่าย ๆ)
เขาว่า sequential I/O กำลังเข้าใกล้ความเร็วหน่วยความจำมากแล้ว..
"Napkin math" นี่เป็นชื่อที่มีเสน่ห์มากจริงๆ
ได้ยินมาว่าตอนทำ UTF-8 นั้น Rob Pike เคยขีดๆ เขียนๆ บนกระดาษเช็ดปากเพื่ออธิบายให้ดูนี่ครับ