Multi-threading example
Last updated
Last updated
Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University
เป็นการเขียนโปรแกรมแบบดั้งเดิมโดยให้โปรแกรมทำงานตั้งแต่บนลงล่าง โดยการใช้หน่วยประมวลผลหน่วยเดียวในการแบ่งทรัพยากรณ์การคำนวณทั้งหมด
เมื่อทำการเขียนโปรแกรมข้างต้นสำเร็จ ให้ทดลองรันโปรแกรมที่เขียนมา และทำการสังเกตุผลที่เกิดขึ้น
จากผลการรันจะเห็นได้ว่า โปรแกรมที่เราเขียนนั้นจะทำการแสดงผลเพียงแค่เครื่องหมาย “+” เท่านั้น เพราะเงื่อนไข loop while ในโปรแกรมนั้นมีค่าเป็นจริงตลอด ทำให้โปรแกรมที่เราอยากให้รันได้ใน loop ที่สองนั้นไม่ทำงาน
จะมีความใกล้เคียงกับการเขียนโปรแกรมแบบ single process แต่จะเป็นการสร้าง thread ขึ้นมา thread เดียวเพื่อแยกการคำนวณออกจาก main thread
จากโปรแกรมด้านบน จะเห็นได้ว่าเราสร้าง thread ขึ้นมาเพื่อไปเรียกฟังก์ชั่น threadFn
จากผลการรันจะเห็นได้ว่าโปรแกรมรันเหมือนโปรแกรมทั่วไปที่เราเขียน แต่ถ้าเราลองสลับบรรทัดที่ 11 กับ 12 เราจะเห็นได้ว่า คำว่า “Output main” จะไม่ได้แสดงในตำแหน่งเดิม ให้ผู้ทดลอง ลองสลับและทำการรันขึ้นมาอีกครั้ง สังเกตุการเปลี่ยนแปลง
การเขียนโปรแกรมแบบนี้จะมีความใกล้เคียงกับการเขียนโปรแกรมแบบ single thread แต่จะเป็นการสร้าง thread ขึ้นมาโดยที่ตัว thread นั้นจะรับค่าที่ส่งจาก main thread ไปประมวลผลต่อใน thread
จากโปรแกรมด้านบน จะเป็นการสร้าง thread และทำการส่งค่าไปให้ thread แระมวลผลโดยค่าที่ส่งไป จะเป็นในลักาณะ pointer เนื่องจากค่าที่อยู่ใน thread เปลี่ยนแปลงค่าที่อยู่ใน main thread ก็เปลี่ยนแลงเช่นกันแม้จะไม่มีการส่งค่ากลับ
การเขียนแบบนี้จะเป็นการสร้าง thread ขึ้นมามากกว่า 1 thread ในการช่วบประมวลผลยิ่งจำนวน thread เยอะการประมวลผลก็ใช้เวลาน้อยลงด้วยเช่นกัน แต่อย่างไรก็ตามเมื่อ thread มีจำนวนมากขึ้นแต่จำนวน memory ที่มีไม่ได้มีมากขึ้นตามอาจทำให้การคำนวณเกิดการผิดพลาดได้ถ้ามี thread ใด thread หนึ่งไปใช้ memory ที่เดียวกัน
จากโปรแกรมด้านบนจะเป็นการสร้าง thread ขึ้นมา 2 thread แต่ละเส้นทำงานต่างกัน เมื่อทำการรันโปรแกรมจะได้ดังรูป
จะเห็นได้ว่าเมื่อเราสั่งโปรแกรมให้รันใน thread ต่างกันโปรแกรมเราจะแสดงทั้งลูปที่แสดงผลค่า “+” และค่า “-” แม้ทั้งสอง loop จะไม่มี loop ไหนจบลงเลยก็ตาม