มนุษย์มักมีความโลภไม่มีที่สิ้นสุด นักวิทยาศาสตร์คอมพิวเตอร์เองก็เช่นกัน ขั้นแรกก็อยากจะให้เครื่องกลทำงานแบบอัตโนมัติและควบคุมสั่งการได้ ก็เลยคิดเครื่อง Z3 ขึ้นมา
เมื่อมันทำงานแบบอัตโนมัติได้แล้ว ก็พยายามจะเร่งให้มันทำงานได้ด้วยความเร็วที่เพิ่มขึ้น ก็เลยใช้เทคโนโลยี VLSI ผนวกเข้าไป
หลังจากนั้นเมื่อเห็นว่ามันทำงานได้เร็วจี๋แล้ว ก็เริ่มคิดว่าถ้าทำได้ควรจะทำให้คอมพิวเตอร์มันมี CPU หลาย ๆ ตัวช่วยกันทำงานดีกว่า ก็เลยสร้างเป็น Multi-Processing ขึ้นมา
เมื่อเห็นว่ามันแบ่งงานกันได้แบบนี้แล้ว ก็เลยสร้างกลไกเพื่อเอื้อประโยชน์ให้ระบบปฏิบัติการสามารถสั่งให้โปรแกรมหลาย ๆ ตัวทำงานได้ในคราวเดียว ก็เลยคิดค้น Multi-Tasking ขึ้นมาอีก
เท่านั้นยังไม่พอ พอเห็นว่ามีโปรแกรมหลาย ๆ ตัวทำงานได้ในคราวเดียวในระบบปฏิบัติการแล้ว ก็ยังจะคิดต่อไปอีกว่าโปรแกรมแต่ล่ะตัว ก็น่าจะมีงานย่อย ๆ เล็ก ๆ ทำขนานกันไปกับงานหลักของโปรแกรมนั้น ๆ ด้วย จึงเกิดเป็น Multithreading ขึ้นมาเป็นจังหวะสุดท้าย
เมื่อมองจากขั้นตอนเหล่านี้แล้ว เราจะพบว่าคอมพิวเตอร์นั้นทรงพลังในด้านความเร็วมาก ที่เหลือจึงเป็นธุระของนักพัฒนาซอฟต์แวร์ ที่จะดึงเอาขุมพลังของคอมพิวเตอร์ออกมาใช้งาน
เดี๋ยวนี้ระบบปฏิบัติการรุ่นใหม่ ๆ ล้วนมี kernel ที่สนับสนุนการทำ Multithreading ครับ อีกทั้งภาษาคอมพิวเตอร์และ IDE รุ่นใหม่ ๆ ก็สนับสนุน Multithreading เช่นกัน
ดังนั้นการที่เราจะสร้างซอฟต์แวร์ใด ๆ ขึ้นมาตัวนึง แล้วจะใช้ขีดความสามารถของการทำ Multithreading หรือเปล่า จึงขึ้นอยู่กับปัจจัยหลาย ๆ อย่างเป็นสำคัญ
- ปัจจัยแรกคงเป็นโจทย์ที่ได้มา ว่าโจทย์นั้นจำเป็นที่จะต้องใช้กลไก Multithreading ในระดับแค่ไหน ถ้าเลี่ยงได้ เลี่ยงได้มั้ย?
- ปัจจัยที่สองเป็นเรื่องของงบประมาณ อย่างที่เรารู้ ว่าการออกแบบพิมพ์เขียวสำหรับซอฟต์แวร์ที่ใช้กลไก Multithreading นั้นไม่ใช่เรื่องง่าย เพราะกลไกดังกล่าว ไม่ใช่กลไกแบบ Single Thread ซึ่งมีแค่งานหลักงานเดียว แต่มันคือ Multi Thread ซึ่งมีงานหลักและงานย่อย ๆ ทำขนานกันไป
- ปัจจัยที่สามเป็นเรื่องของทักษะในการพัฒนาซอฟต์แวร์ ของทีมพัฒนาซอฟต์แวร์ ว่าจะสามารถสร้างซอฟต์แวร์โดยใช้กลไก Multithreading ได้ตามพิมพ์เขียวที่เขียนเอาไว้มั้ย?
โดยส่วนตัวแล้วมองว่า หากซอฟต์แวร์ที่ต้องสร้าง มีความจำเป็นต้องใช้ความเร็วสูงในการประมวลผล เช่น Speech Recognition, Text To Speech, Voice Recognition หรือ Natural Language Processing ก็จำเป็นอย่างมาก ที่จะต้องออกแบบให้ซอฟต์แวร์ดังกล่าว ดึงพลังความสามารถของคอมพิวเตอร์และระบบปฏิบัติการออกมาใช้ ด้วยกลไกการเขียนโปรแกรมแบบ Multithreading
แต่หากว่าซอฟต์แวร์ที่ต้องสร้าง เป็น Web-based, เป็นซอฟต์แวร์ ERP, เป็นซอฟต์แวร์ระบบค้าปลีก ก็คงไม่จำเป็นต้องใช้กลไก Multithreading กระมังครับ
ดังนั้นการที่เราจะสร้างซอฟต์แวร์ขึ้นมาตัวนึง จึงจำเป็นอย่างยิ่งที่จะต้องพิจารณาจากหลาย ๆ ด้าน ซึ่งสำหรับผมแล้ว กุญแจหลักสุดท้ายสำหรับการตัดสินใจ คงเป็น “งบประมาณ” นั่นเอง
เงินล้วน ๆ ครับ 😛 ไม่เชื่อลองถามบริษัทเอกชนทั้งหลาย ที่ดำเนินธุรกิจด้านซอฟต์แวร์ดูสิ เขาคิดเหมือนผมทั้งนั้นแหล่ะ 🙂
[tags]z3,multiprocessing,multitasking,multithreading,งบประมาณ[/tags]
ถะ ถะ ถะ ถูกต้องนะครับบบบบ
เชื่อครับ (โดยไม่ต้องไปถามบริษัทเอกชนทั้งหลาย ที่ดำเนินธุรกิจด้านซอฟต์แวร์) เราเลือกเทคโนโลยีที่เหมาะสมมาใช้งานเพื่อแก้ปัญหา แต่เงินจะเป็นตัวบอกว่าเราจะได้ใช้เทคโนโลยีที่เหมาะสมนั้นแก้ปัญหาหรือไม่ (^ ^)
อืมๆ เงินนี่เป็นผลต่อเทคโนโลยีขนาดนั้นเลยเหรอนี่ แล้วจะทำอย่างไรครับ ให้เงินนั้น ไม่มีผลต่อการทำงานของเรา
คนที่มีความสามารถในการเขียนโปรแกรมเก่งๆ หรือมีประสบการณ์สูงๆ ย่อมโก่งค่าตัวให้ได้ค่าตัวแพงๆ ซึ่งอาจเป็นเหตุผลหนึ่ง ที่ทำให้บริษัทเอกชนที่พัฒนาซอร์ฟแวร์ ต้องใช้เงินล้วนๆ ในการดำเนินธุรกิจ ในยุคแห่งข้อมูลข่าวสาร เฉกเช่นทุกวันนี้
ผมกำลังคิดอยู่อ่ะครับคุณ patr, น้องโอ, คุณเดย์ ว่าจะทำไงดี้น้อ เราถึงจะแยกกระแสเงินสดออกจากธุรกิจได้ เอ๊ะ มันจะเป็นไปได้ไงเนี่ย?
ถ้ากลับไปสู่ยุค ใช้ ของแลกของหละคับ จะแยกได้หรือเปล่า หรือจริงๆแล้วแนวความคิดของกระแสเงินสดมีมานานแล้ว แต่ว่าเปลี่ยนรูปแบบตัวแทน???
ปล ผมก็คิดไปเรื่อยเปื่อยหนะครับพี่ไท้