กระโดดไปยังแผงนำทาง

Loop 24 April 2007 7:42 pm

บันทึกโดย Mr. PeeTai ใน : การสร้างซอฟต์แวร์ , 4 ความคิดเห็น

คนเขียนซอฟต์แวร์ไม่รู้จัก Loop ล่ะก็เชยแย่เลย หวังว่าคงจะไม่เชยกันนะครับ :-P ไอ้เจ้า Loop นี่ถือเป็นเสน่ห์ของการสร้างซอฟต์แวร์เลยนะ เพราะมันทำให้เราสั่งคอมพิวเตอร์ให้ทำงานซ้ำ ๆ ได้ แถมแต่ล่ะรอบที่มันทำงานมันก็สามารถทำงานที่แตกต่างกันได้ด้วย

ในสมัยที่ผมยังเป็นนักวิเคราะห์ระบบอยู่นั้น เวลาผมต้องตรวจต้นฉบับซอฟต์แวร์ของใคร ผมจะดูที่การวน Loop ของเขาก่อนเลย ว่าเขาได้เค้นสมรรถนะของคอมพิวเตอร์ได้อย่างสูงสุดหรือยัง ไม่เคยสังเกตกันอ่ะดิ ใช่ม้า การวน Loop มันสำคัญนะ

บางคนใช้ Array ประกอบการวน Loop ด้วย เก่งมาก ๆ เลยล่ะ มันทำให้ต้นฉบับโปรแกรมมีขนาดเล็ก การลงมือเขียนโปรแกรมก็ไม่ต้องมาก ได้จำนวนบรรทัดที่น้อย แต่สามารถทำงานได้ผลลัพธ์ที่มหาศาล

ถ้าเราสังเกตกันดี ๆ เราจะพบว่าการวน Loop นั้น มันเหมือนกับการหมุนของ Stepping Motor ที่ไว้ใช้ขับดันฟันเฟืองให้ทำงาน ดังนั้นถ้าเราออกแบบการวน Loop ให้ดี มันจะได้ผลลัพธ์ที่มหาศาลมาก

โดยเฉพาะการเข้ารหัสถอดรหัสนั้น จะมีการใช้กลไกการวน Loop ที่ซับซ้อนมาก บางทีก็วนซ้อนกันหลายสิบชั้น แต่ล่ะชั้นก็อาจจะมีการวน Loop รอบเล็ก หรือรอบใหญ่ที่แตกต่างกัน

ประเด็นสำคัญที่เรามักพบในการวน Loop ซึ่งไม่รู้มีใครสนใจหรือเปล่า แต่ผมสนใจ และก็ไม่เคยแก้ตกเลย ก็เลยปล่อยเลยตามเลยไป นั่นก็คือ … เมื่อเราสร้างซอฟต์แวร์โดยบรรจุคำสั่งให้มันวน Loop แล้วเราสั่งให้มันทำงาน มันมักจะทำให้ CPU ของคอมพิวเตอร์เราขึ้นสูงถึง 100% เสมอ

มันทำให้เกิดปัญหานะ เพราะมันทำให้ซอฟต์แวร์ตัวอื่น ๆ ซึ่งก็ทำงานอยู่เหมือนกัน ไม่สามารถทำงานได้อย่างเต็มที่นัก เพราะโดนซอฟต์แวร์ของเรากินเวลาของ CPU ไป

การใส่คำสั่งเพื่อ Yield CPU ลงไปในซอฟต์แวร์ของเรา มันก็ไม่ได้ช่วยอะไรมากนัก เพราะถึงแม้ว่าเราจะ “แบ่ง” เวลาของ CPU เพื่อให้ซอฟต์แวร์ตัวอื่นแล้วก็ตาม แต่มันก็ไม่ทำให้การใช้งาน CPU ลดลงจาก 100% เลย

ผมว่าพวกฝรั่งเขาคงมีวิธีนะ ถึงได้สามารถเขียนซอฟต์แวร์ให้วน Loop แล้วไม่กินกำลังของ CPU ถึง 100%

Technorati Tags: , , , , ,