สร้างสคริปต์ให้รันแบบ Multi-Thread ด้วยโมดูลใดของ GENESIS32 ดี?

การทำงานแบบ Multi-Thread เพื่อให้แต่ละ Thread ไม่ต้องรอกัน ทำงานเป็นอิสระต่อกัน เราควรใช้โมดูลใดของ GENESIS32 ดี?

โมดูลที่สามารถรันสคริปต์ด้วยคุณสมบัติแบบ Multi-Thread ได้ก็อย่างเช่น GraphWorX32, TrendWorX32, ScriptWorX32 ซึ่งถ้าเราเขียนสคริปต์บน GraphWorX32, TrendWorX32 หรือแม้แต่ AlarmWorX32 การจะแยก Thread ออกจากกันโดยสิ้นเชิงเราก็ควรแยกแต่ละ Designer ออกจากกัน เช่นใช้ GraphWorX 2 ไฟล์เพื่อรันสคริปต์ที่มีการทำงานหนัก 2 Thread แยกกันไปเลย แต่ถ้าเราไม่สะดวกที่จะสร้างไฟล์ GraphWorX หลายไฟล์ ขอแนะนำให้ใช้ ScriptWorX32 หรือ ScriptWorX2006 ซึ่งเป็นโมดูลหนึ่ง GENESIS32 ในบทความนี้จะกล่าวถึง ScriptWorX2006 เนื่องจากมีความยืดหยุ่นมากกว่าในการนำไปใช้งาน ทั้งด้านการเซตให้ทำงานแบบ Service และการใช้งาน Trigger ได้หลากหลายรูปแบบ

จากรูปเป็น ScriptWorX2006 เราสามารถสร้าง Designer ได้หลาย ๆ ตัว เพื่อแยกการทำงานแต่ละ Thread ออกจากกันโดยสิ้นเชิงเพื่อความมั่นใจ เนื่องจากถ้าใช้ใน Designer เดียวกันนั้นโปรแกรมเมอร์ที่ไม่มีพื้นฐานหรือหลักการของการเขียนโปรแกรมแบบ Multithread อาจจะอ้างอิงตัวแปรที่ใช้ร่วมกันซ้ำ ๆ กัน หรือใช้คอมโพเน็นท์ใด ๆ ร่วมกันในลูปโดยไม่ได้สร้างInstanceหลายตัวขึ้นมาเพื่อรองรับการใช้งานให้เพียงพอ ทำให้การใช้งานต้องมารอลำดับให้แต่ละโค้ดที่ใช้งาน Instance ของคอมโพเน็นท์นั้นทำงานเสร็จเสียก่อน  ดังนั้นการแยก Designer จึงช่วยกันความบกพร่องจากการเขัียนโปรแกรมได้ส่วนหนึ่ง (แต่ถ้าเราไม่สนใจ Multi Thread เราก็ไม่จำเป็นต้องแยก Designer ใดๆ)

image

จากรูป ตัวอย่างโปรเจ็คชื่อ DBLoggerProj มี Designer ชื่อ DBLoggerDes ซึ่งเราสามารถ Add Designer เข้ามาใหม่ได้อีกเรื่อย ๆ ในแต่ละ Project ในตัวอย่างนี้มี Designer เดียว ถ้าต้องการเพิ่มให้คลิ้กขวาที่ชื่อโปรเจ็ค แล้วเลือก New > Designer/Thread

image 

ในแต่ละ Designer ก็จะมี Script ได้หลาย ๆ ตัวเช่นกัน แต่ละ Script ก็สามารถเลือก Trigger มาสั่งให้ทำงาน โดยคลิ้กที่ปุ่ม … ช่อง Trigger name ถ้าไม่Triggerที่มีอยู่ไม่พอใช้ ก็ไปสร้าง Trigger ขึ้นมาใหม่ใน UDM (Unified Data Manager) ดูวิธีการสร้าง Trigger ได้ที่นี่ ซึ่งในลิงค์จะแสดงการสร้าง Trigger แบบ Time Trigger ถ้าเราต้องการสร้าง Trigger แบบอื่น ๆ เช่น Alarm Trigger, Event, Data Trigger ก็จะมีตัวอย่างใน UDM ให้ดูเทียบเคียงอยู่แล้ว ในตัวอย่างก็จะใช้ Trigger ที่มำงานทุก 10 วินาทีมาสั่งสคริปต์นั่นเอง

เท่านี้ก็จะได้ Script ที่ทำงานแยก Thread แบบอิสระต่อกันและทำงานขนานกันไปได้หลาย ๆ Thread อย่างไรก็ตามโปรแกรมเมอร์ควรเข้าใจพื้นฐานเขียนโปรแกรมที่มีผลกระทบด้วย เช่นการวนลูป การใช้ตัวแปรร่วมกันในลูป เหล่านี้มีผลต่อการทำงานของแต่ละ Thread ว่าจะช้าหรือเร็ว เป็นเรื่องพื้นฐานของภาษาโปรแกรมทุกภาษา

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s