FreeBSD เปลี่ยน Bubble Sort ของ SYSINIT เป็น Merge Sort
(twitter.com/cperciva)- มีรายงานว่า FreeBSD ใช้เวลาระหว่างบูต 7% ไปกับการจัดเรียง SYSINIT ด้วย bubble sort
- โค้ดนี้ถูกสร้างขึ้นในปี 1996 และในยุคนั้นมี SYSINIT ให้จัดเรียงเพียงราว 30 รายการ แต่ปัจจุบันมีมากกว่าพันรายการแล้ว จึงใช้เวลานานขึ้น
- ในคอมมิตล่าสุด ได้เปลี่ยน SYSINIT array เป็น SLIST ทำให้สามารถใช้ merge sort ได้ และยังเพิ่ม SYSINIT ใหม่ได้เร็วขึ้นด้วย
- merge sort เร็วขึ้นได้ประมาณ ~100 เท่า
- เมื่ออิงตาม Firecracker จึงสามารถประหยัดเวลาได้ 2ms จากเวลาบูตทั้งหมด 28ms
3 ความคิดเห็น
สำหรับชุดข้อมูลที่มีขนาดไม่เกินระดับหนึ่ง การใช้โค้ดที่เล็กและเข้าใจง่ายก็น่าจะเป็นทางเลือกที่ใช้ได้
จึงน่าจะยังมีกรณีการใช้อัลกอริทึมที่ช้าแบบนี้หลงเหลืออยู่อีกมากจากการตัดสินใจเช่นนั้น
(อาจเป็นอคติของผมเอง) แต่ผมรู้สึกแรงกล้าว่า ถ้ามีใครมาคอยจับผิดเรื่องแบบนี้ ก็คงเป็นคนที่ไม่ค่อยได้ช่วยอะไร แถมบ่นเก่งเสียมากกว่า
FreeBSD ใช้เวลา 7% ระหว่างการบูตไปกับการจัดเรียง SYSINIT แบบ bubble sort จึงเปลี่ยนเป็น merge sort
ความคิดเห็นจาก Hacker News
bubblesortเป็นmergesortใน SYSINITs ทำให้เวลาในการบูตดีขึ้นอย่างมากbubblesortไม่ใช่ความผิดพลาด และมันทำงานได้ดีมาหลายปี จนกระทั่งมีกรณีใช้งานเฉพาะที่ทำให้ความไม่มีประสิทธิภาพของมันเด่นชัดขึ้นbubblesortใน SYSINITs เมื่อบูตบน Firecrackermergesortทำให้โค้ดลดลงสุทธิ 5 บรรทัด และทำให้เวลาในการบูต "เร็วขึ้น 100 เท่า"bubblesortในตอนแรกอาจได้รับอิทธิพลจากปัจจัยอย่างเช่นจำนวนงานmergesortเป็นตัวอย่างที่แสดงให้เห็นว่าการเพิ่มขึ้นเล็กน้อยสามารถสร้างความแตกต่างสำคัญต่อประสิทธิภาพโดยรวมได้bubblesortและการที่มันไม่ค่อยสอดคล้องกับสัญชาตญาณbubblesortใน SYSINITs