ABA


"שאלה לגבי טראדים"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11095 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11095
matan13
חבר מתאריך 14.7.08
19469 הודעות
   17:35   29.12.12   
אל הפורום  
  שאלה לגבי טראדים  
 
   יש לי מערך של אובייקטים כלשהם, בfor loop אני שולח כל אחד מהם למתודה כלשהי, בתוך המתודה אני יוצר טראד חדש ומתחיל אותו.



for(int i=0; i<myarray.length(); i++)
runy.simulate(myarray);


runy היא מחלקה שיוצרת מהאובייקט אובייקט שהוא runnable(ממחלקה אחרת שממשת את הInterface runnable) ומריץ אותו(זאת אומרת שולח אותו למתודת הrun שבמחלקה שממשת את runnable).

האם אחרי שב-runy אני יוצר טראד עבור האובייקט ומריץ אותו, האם אני יחזור מיידת לloop וימשיך לשלוח אובייקטים אחרים לruny?

או שהתוכנה תחכה שה-run עבור הטראד שיצרתי לאובייקט יסתיים(ובעצם לא עשיתי שום דבר בגלל שזה כמו לעשות אותו דבר בלי טראדים)?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא ממש הבנתי מה עשית Zippo  29.12.12 18:56 1
     אני אנסה להיות יותר ברור: matan13 29.12.12 20:58 2
         עדיין לא הבנתי. Zippo  31.12.12 00:04 3

       
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   18:56   29.12.12   
אל הפורום  
  1. לא ממש הבנתי מה עשית  
בתגובה להודעה מספר 0
 
ערכתי לאחרונה בתאריך 30.12.12 בשעה 23:06 בברכה, Zippo
 
אבל בכל אופן, זה ממש לא טוב ליצור ככה thread-ים על ימין ועל שמאל.
תשתמש ב-thread pool. יש מחלקה מיוחדת, שאתה מאתחל, עם כמות ת'רדים התחלתית מסוימת, וכמות מקסימלית, והת'רדים ממוחזרים בעבודות שונות.
תחפש ExecutorService שהוא אינטרפייס שנותן לך את השירות הזה.
יש כל מיני קלאסים שמממשים את האינטרפייס הזה. אם זה אתחול מתוזמן לפי טיימר של עבודות, או אתחול מס' מקסימלי של עבודות במקביל, ומשיכה מיידית של עבודות כשת'רדים מתפנים, וכו'...


for{int i=0; i<myArray.length(); i++){
executorService.submit(someRunnableObject);
}

דרך יותר טובה אגב לעשות את זה, תהיה לשלוח מראש מערך שלם של runnables
או callables.

אם יש לך הרבה עבודות לעשות, אתה יכול להנדס אותם במבנה נתונים ולאתחל את כולם בבת אחת בצורה הרבה יותר יעילה:


List<Callable> lc = getListOfJobs();
List<Future> lf = executorService.invokeAll(lc);

בהצלחה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
matan13
חבר מתאריך 14.7.08
19469 הודעות
   20:58   29.12.12   
אל הפורום  
  2. אני אנסה להיות יותר ברור:  
בתגובה להודעה מספר 1
 
   אני מריץ תוכנית שמדמה חברה שעושה ניסויים.

לכל ניסוי יש ניסויים קודמים שהוא צריך, ציוד שהוא צריך ומעבדה שהוא צריך.

למחלקה "ניסוי" יש מחלקה שמרחיבה אותה וגם ממשת את runnable interface.

יש לי מחלקה "אחראי" שעוברת על רשימת הניסויים, היא שולחת כל ניסוי לראש מחלקה("ראש מחלקה" היא מחלקה) המתאים לו, בראש המחלקה יש pool של תראדים(כל תראד יכול להריץ ניסוי).

אז לחזור לשאלה שלי, במחלקה "אחראי" אני רץ על הרשימה ושולח כל אחד מהם למתודה ב"ראש מחלקה", שם אני יוצר runnable object ומריץ בעזרת הpool.

אז אני רוצה לדעת אחרי שזה קורה, האם התוכנית מחכה למתודה run של הטראד שתסיים?

או שהיא חוזרת מיידית למחלקה "אחראי" להמשך הסריקה?(אני רוצה לדעת האם המימוש שלי של טראדים פה נכון ולא סתם משתמש בטראד בשביל להריץ את הקוד אבל לא מנצל את היכולות של טראדים).

בנוגע לשליחה של כל הניסויים האפשריים ל"ראש מחלקה" - אני יעשה את זה, אבל זה לא משנה את השאלה שלי.
ותודה על התגובה המהירה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   00:04   31.12.12   
אל הפורום  
  3. עדיין לא הבנתי.  
בתגובה להודעה מספר 2
 
תשתדל להתנסח טוב יותר.
בכל אופן, אם הבנתי אותך נכון, אתה שואל לגבי המימוש שלך,
שבהיעדר דוגמאות קוד (גיסטים או פייטבין בבקשה), קצת קשה יהיה לענות על זה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net