28 คะแนน โดย xguru 2022-11-28 | 14 ความคิดเห็น | แชร์ทาง WhatsApp
  • คำถาม 2 ข้อที่มักถูกถามในการสัมภาษณ์
    • ลองเขียนโปรแกรมนับจำนวนคำในไฟล์ข้อความ
    • คอขวดด้านประสิทธิภาพของโปรแกรมนี้อยู่ที่ส่วนไหน?
  • หลายครั้งคนมักตอบว่า "การอ่านจากไฟล์" แต่ตอนนี้ไม่ใช่อีกต่อไป
  • เมื่อ 10-20 ปีก่อนอาจใช่ แต่ ณ ปี 2022 การอ่านข้อมูลแบบลำดับจากดิสก์ทำได้เร็วมากแล้ว (ผู้เขียนเองก็ไม่รู้มาก่อนจนได้ลองทดสอบ)
  • ส่วนที่เป็นคอขวดคือการประมวลผล/พาร์สอินพุตและจัดสรรหน่วยความจำ: งานอย่างการแยกเป็นคำ แปลงเป็นตัวพิมพ์เล็ก และนับความถี่ด้วยแฮชเทเบิล
  • เมื่อลองทดสอบไฟล์ข้อความขนาด 413MB (ไฟล์ที่นำพระคัมภีร์ฉบับคิงเจมส์มาต่อกัน 100 ครั้ง) ด้วย Python/Go
    • การอ่านใช้เวลาเพียง 0.1-0.2 วินาที ส่วนการประมวลผลใช้เวลาตั้งแต่ 7 วินาทีถึง 2 วินาที
  • สรุปคือ ในการประมวลผล "Big Data" ดิสก์ I/O อาจไม่ใช่คอขวด

14 ความคิดเห็น

 
is9117 2022-12-01

ต่อให้เป็นการเข้าถึงแบบ sequential ก็ยังมีส่วนที่ได้รับผลกระทบตามแต่ละภาษาและแต่ละไลบรารี เช่น วิธีใช้ IO pipe หรือความถี่ที่นักพัฒนาเรียกใช้ IO API ดังนั้นการจะบอกว่า I/O ไม่ใช่คอขวดอีกต่อไป ผมมองว่าจำเป็นต้องมีเงื่อนไขตั้งต้นกำกับไว้

 
yuriwin 2022-11-30

แล้ว network io ไม่นับเป็น io เหรอ? 555

 
yuriwin 2022-11-30

ไม่ว่าจะเร็วขึ้นแค่ไหน I/O ก็คือ I/O นั่นจึงเป็นเหตุผลว่าทำไมเวลาเขียนโปรแกรมถึงมีโซลูชันที่มีไว้สำหรับส่วน I/O โดยเฉพาะแยกต่างหาก

 
love7peace 2022-11-29

จะให้เปลี่ยนดิสก์ Big Data ทั้งหมดเป็น NVMe SSD งั้นเหรอ? 555 แล้วมันจะราคาเท่าไหร่กันล่ะ...

 
loblue 2022-11-28

ในฐานะคนที่ต้องทำงานซึ่งทรมานกับ disk I/O อย่างมาก และต้องพยายามทำให้ platter เคลื่อนที่ให้น้อยที่สุด เรื่องนี้ก็น่าทึ่งดีนะครับ
ในเนื้อหาบทความมีพูดถึงคำว่า "sequential" อยู่ด้วยนะครับ
ถ้าไม่มีการ seek เลย ก็อาจจะไม่ใช่เรื่องที่ผิดเสียทีเดียวก็ได้ครับ

 
deokim 2022-11-28

เป็นการทดลองที่ตั้งสมมติฐานผิด

 
roxie 2022-11-29

ช่วยอธิบายเพิ่มเติมหน่อยครับ

 
deokim 2022-12-05

คอขวดนั้นโดยตัวมันเองเป็นเรื่องของเวลาเชิงสัมพัทธ์
การเปรียบเทียบความเร็วของ CPU กับ I/O จึงถูกต้อง
ต่อให้ I/O จะเร็วขึ้นกว่าสมัยก่อน I/O ก็ไม่สามารถเร็วกว่า CPU ได้

 
deokim 2022-12-05

อาจเป็นการใช้ mmap เพื่อเพียงโหลดไว้ในหน่วยความจำเสมือน แล้วในความเป็นจริง CPU จะอ่านทุกครั้งที่ทำการคำนวณก็ได้
การสื่อสารระหว่าง CPU กับหน่วยความจำทั้งหมด (รีจิสเตอร์, หน่วยความจำหลัก, ดิสก์) ก็ล้วนเป็น I/O ทั้งหมด
https://stackoverflow.com/questions/5877797/how-does-mmap-work

 
park2348190 2022-11-28

ชักอยากรู้ขึ้นมาว่าเกณฑ์ที่ใช้ตัดสิน Big Data คืออะไรกันแน่

 
nicewook 2022-11-28

น่าสนใจครับ

 
jungmin1237 2022-11-28

วันนี้ก็ได้เพิ่มพูนความรู้อีกหนึ่งอย่าง

 
xguru 2022-11-28

URL ของคอมเมนต์แรกที่ https://news.ycombinator.com/item?id=33751266 น่าสนใจดีนะครับ
Napkin Math (คณิตศาสตร์ง่าย ๆ)
เขาว่า sequential I/O กำลังเข้าใกล้ความเร็วหน่วยความจำมากแล้ว..

 
nicewook 2022-11-28

"Napkin math" นี่เป็นชื่อที่มีเสน่ห์มากจริงๆ
ได้ยินมาว่าตอนทำ UTF-8 นั้น Rob Pike เคยขีดๆ เขียนๆ บนกระดาษเช็ดปากเพื่ออธิบายให้ดูนี่ครับ