threads decoupling

sadov

New member
threads decoupling

פרוק האפליקציה לthreads ברמת הdesign למה? כמה? מתי? למישהו יש חומר בנושא ??? תודה איתי
 

sadov

New member
ללא קשר לשפת תכנות

עדיף ללא קשר לשפת תיכנות מסוימת, אלה ברמת ה design של פרוייקט מה השיקולים לבנית פרוייקט multithreaded מאומת עבודה ב thread אחד (מעדיף ב C\CPP אם כבר מדברים על שפות)
 

voguemaster

New member
כעיקרון לא מחייב

פעולות IO עדיף לעשות ב-THREAD נפרד. כשאני אומר פעולות IO אני מדבר לאו דווקא על כתיבה וקריאה מהדיסק הקשיח (פעולה די מהירה יחסית ל-IO אחרות..) אלא על דברים כמו הדפסות, שליחת מידע ברשת (אפילו אם זו LAN) וכד´.. אם לדוגמא אתה רוצה שמשהו יתבצע במקביל כשהיוזר עדיין עושה משהו אחר בתוכנית, זו גם סיבה טובה (דוגמא, חישובים מסוימים בזמן שהיוזר עדיין מקליד מידע או מפעיל משהו אחר בתוכנית..). כעיקרון מנחה, אם אין התערבות של משתמש ואין פעולות IO עם פוטנציאל להימשך זמן רב, אלא הכל מבוצע לוקאלית בזיכרון אז לא צריך עוד THREADS.. אלי
 

חובבן

New member
נוח להשתמש ב threads

כשיש שתי סדרות (או יותר) של פעולות שיכולות להתבצע במקביל וללא תלות אחת בשניה. כל סידרה כזאת תמומש כ thread או כ process נפרד. שים לב שלא בכל מערכת החלוקה ל threads תשפר את המהירות, זה תלוי במערכת ההפעלה ובחומרה.
 
שימוש ב threads בד"כ מוריד ביצועים אלא אם כן משתמשים במערכת מרובת מעבדים. שימוש כנ"ל מוסיף תקורה של Context switch, של סנכרון בין Threadים (שעשוי להיות מסובך ועתיר מכשלות מבחינה תכנותית). מתי משתמשים? * אם רוצים לבצע פעולה ממושכת ברקע, בלי "לנעול" את היישום שלך (וגם לזה יש פתרונות שלא כרוכים בריבוי נימים). * אם רוצים לבצע מספר מטלות בעדיפות גדולה / נמוכה יותר ממטלות אחרות, בו זמנית. * באופן כללי, אם זה יותר קל (בצורה משמעותית) ככה.
 

פרדיקט

New member
בד"כ?../images/Emo12.gif

אני מאמין שהתכוונת לומר "שימוש ב- THREADS בד"כ משפר ביצועים". אני לא מכיר מע´ הפעלה היום שהיא לא MULTI-THREADED, ויש לכך סיבות טובות . כפי שציינת, יש את ה - OVERHEAD של CONTEXT-SWITCH ואת הסיוט הכרוך בלדבג THREADS כך שאם אתה (הכותב המקורי) רוצה לעשות שימוש ב- THREADS אני מציע לך להקדיש יותר זמן מהרגיל לשלב ה- DESIGN. תתחיל בזה שה - OVERHEAD של ה - CONTEXT לא צריך להיות 1% מזמן המעבד. הפרדיקט.
 
זה מאוד תלוי

בסוג וגודל הפרוייקט ואופי הניהול שלו. באופן כללי ההחלטה אם להשתמש או לא להשתמש ב-Multithreading תלויה ב: 1. האם מערכות ההפעלה שעליהן אמור המוצר לפעול תומכות ב-Multithreading? אם לא: האם עדיף לכתוב קוד כללי שיעבוד נניח ב-Multiprocessing או כ-Single thread, או שאולי לאותן מערכות הפעלה שאינן תומכות כדאי לפתח קוד מיוחד? 2. האם הביצועים של המוצר יושפעו ברמה הגלובלית מחלוקה ל-Threads? אם לא, אז אולי כדאי להשאיר את ההחלטה ברמת ראשי הצוותים או התכניתנים, כי יכול מאוד להיות שחלק מסויים מהמוצר יושפע מאוד לטובה מהחלטה כזו... 3. תכנות Multithreading הוא מסובך יותר. האם התוכניתנים יוכלו להבטיח מינימום באגים בלי להאריך את זמן הפיתוח? במילים אחרות: האם יש זמן להתעסק עם Multithreading? כמובן שחלק מהשאלות מההחלטות מתנגשות קצת אז צריך להתפשר, לדוגמה: אם ביצועים לא כ"כ חשובים אז אולי אפשר לוותר. או שאם ביצועים מאוד חשובים אז צריך אולי להאריך להגדיל את זמן הפיתוח... אני בטוח שעם הזמן תעלינה עוד שאלות...
 
למעלה