DCSIMG
ThreadPool and Robotics Studio - Pavel's Blog
Sign in | Join | Help

Pavel's Blog

Pavel is a software guy that is interested in almost everything
software related... way too much for too little time

ThreadPool and Robotics Studio

 

בעולם של ה-CLR לא קשה לבצע פעולות אסינכרוניות. למשל, כל delegate תומך אוטומטית בהפעלה אסינכרונית ע"י BeginInvoke ו-EndInvoke. מי שצריך לעבוד ללא delegate יכול להשתמש ב-ThreadPool שלו מספר מתודות סטטיות להפעלת method בצורה אסינכרונית. הבעיה ב-ThreadPool היא שהינו יחיד. כלומר, אם יש מצב שבו יש באפליקציה שתי סוגי בקשות, אחת בעדיפות רגילה ואחת בעדיפות גבוהה, הן ייזרקו לאותו תור שמנהל את הבקשות האסינכרוניות, ואם לדוגמא, יש 100 בקשות רגילות בתור ואז צריך להעביר בקשה בעדיפות גבוהה, הבקשה תאלץ לחכות עד לטיפול של ה-100 הקודמות (כי ה-ThreadPool לא ייצר 100 Threads). מה עושים?

ב-Windows Vista קיים API חדש המאפשר לייצר Thread Pool פרטי (CreateThreadPool) ולעבוד איתו. לכן, פתרון אחד (בויסטה) יהיה לעטוף את ה-API בעטיפת דוט נט דרך P/Invoke או C++/CLI.

דרך אחרת היא שימוש בחבילת Robotics Studio. חבילה זו כוללת יכולת לבנות מודלים של רובוטים (בתוכנה בלבד אן עם חיבור לרובוט פיזי) ושליטה בכל מיני רמות - חבילה מאד מעניינת כשלעצמה.

בלי קשר לרובוטיקה, החבילה כוללת ספריה שנקראת (CCR (Concurrency and Control Runtime שהיא אוסף של טיפוסים המהווים מנגנון מתוחכם לניהול של בקשות אסינכרוניות. בין השאר קיימת האופציה לייצר Thread Pool פרטי ולפתור את בעית הבקשות עם העדיפויות השונות, ויש שם עוד הרבה דברים טובים שהם הרבה יותר מתוחכמים מאשר ThreadPool.QueueUserWorkItem. היופי הוא שניתן להשתמש ב-CCR ללא כל קשר לרובוטיקה.

מאמר התחלתי טוב ניתן למצוא ב-MSDN magazine בקישור הבא.

 

Comments List

No Comments

Leave a Comment

(required) 
(
required
)
 
(optional)
(required) 

Enter the numbers above: