ABA


"עבודה בת'רדים ו lock בקטעים קריטים C#"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15596 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15596
Static
חבר מתאריך 1.7.02
1329 הודעות
   07:48   03.12.09   
אל הפורום  
  עבודה בת'רדים ו lock בקטעים קריטים C#  
 
   יש לי מערכת שאני עובד עליה כבר הרבה זמן, היא לא ממש מסובכת מבחינת לוגיקה בגדול זה התיאור שלה:

12 קליינטים (12 ת'רדים שונים) שולחים מידע בקצב מאוד גבוה לסרבר אחד.
המידע שנשלח מהקליינטים הוא string פשוט.
כל סטרינג שמגיע מהקליינטים נכנס לתוך תור (QUEUE) משותף בסרבר.
כשהסרבר בודק אם יש מידע בתור הוא עושה DEQUEUE ל-string ושולח אותו הלאה ל webservice ומשם ל-DB.

כשעבדתי עם קליינט אחד מול הסרבר הכל עבד מצויין ומהר.

עכשיו שיש לי 12 קליינטים בו זמנית המערכת נתקעת אחרי כמה דקות עבודה בשלב שאני מוציא מידע ל web service ומוציאה לי את ה EXCEPTION שאומר שהסרביס קיבל TIMEOUT.

רציתי לשמוע עצות ממכם איך להמנע מתקיעה שכזאת ברגע שיש המון מידע שעובר, ממה שנראה לי אני צריך לממש LOCKים לקטעים קריטים בקוד, אבל אני לא ממש מכיר את הסינטקס, או שאני צריך לחשוב על כיוון אחר?

תודה מראש לעוזרים!



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

  האשכול     מחבר     תאריך כתיבה     מספר  
  תוך כדי שכתבתי את השורות האלה הבנתי את השטות שעשיתי חח Static 03.12.09 08:57 1
     אתה יכול לשים גם לוק פר מתודה מלאה ולא כלפי קטע ldan192  03.12.09 12:19 2
         לא בטוח שהבנתי אותך לגמריי Static 03.12.09 13:42 3
             שניה, אולי לא הבנתי אותי ldan192  03.12.09 14:10 4
                 אני אבהיר את הנושא לעומק Static 03.12.09 14:49 5
                     אוקיי, והמספר 12 של סרברים הוא קבוע? ldan192  03.12.09 18:03 8
                         מצויין! אני מסכים עם מה שאתה אומר פה Static 03.12.09 19:55 9
                             בנוגע ל-12 קליאנטים כסטטי זה פשוט מקל את המימוש אבל ldan192  03.12.09 20:05 10
                                 העלתי את חלקי הקוד הרלוונטים בקובץ TXT Static 06.12.09 07:59 14
                                     טוב, זה קצת מורכב כשאין לי את כל המתודות הסטטיות ldan192  11.12.09 15:38 19
  בעקרון לא נשמע ממש שאתה עובד נכון עם sockets. Deuce  03.12.09 15:31 6
     מה בעצם אמרת פה? Static 03.12.09 15:41 7
         locks אתה חייב, אין פה בכלל שאלה. Deuce  03.12.09 21:23 11
         אתה צריך מנגנון של THREAD POOL זה קלאסי במקרה שלך Net_Boy  04.12.09 09:48 12
             לא מסכים איתך. ThreadPool נועד בשביל למנוע ldan192  04.12.09 11:09 13
                 כמה דברים Net_Boy  07.12.09 22:38 16
                     בנוגע ל-3, שוב לא מסכים, כי זה מה שהוא עושה כרגע ldan192  08.12.09 00:24 17
                         תודה, אני אשמח אם יהיה לך זמן לעבור על הקוד ולהציע יעול Static 08.12.09 09:33 18
             אני כבר עובד עם THREAD POOL Static 06.12.09 08:01 15

       
Static
חבר מתאריך 1.7.02
1329 הודעות
   08:57   03.12.09   
אל הפורום  
  1. תוך כדי שכתבתי את השורות האלה הבנתי את השטות שעשיתי חח  
בתגובה להודעה מספר 0
 
   עבדתי עם תור אחד ל 12 קליינטים וכולם ניסו לכתוב לו בקצב מטורף
הוספתי לו נעילות lock(queue)

ועכשיו הכל עובד!


על הדרך שקראתי איך לממש LOCK ראיתי שיש 2 דרכים.
1. בלוק של LOCK

lock(queue)
{
}

2. עבודה עם MONITOR


Monitor.Enter(this);

Monitor.Exit(this);

מישהו יודע מה עדיף? מוניטור או לוק ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   12:19   03.12.09   
אל הפורום  
  2. אתה יכול לשים גם לוק פר מתודה מלאה ולא כלפי קטע  
בתגובה להודעה מספר 1
 
קריטי עם Object synchronized fooName(...){}

מוניטור דיי מיותר לשימושים שלך (זה דיי מקביל ל-semaphore),
הבעיה שלך הייתה אבל שקיבלת אקספשן על concurrency?
לפי דעתי, יותר נכון ויעיל זה לממש תור לכל אפליקציה שונה
וה-main thread של הסרבר יאסוף במחזוריות אובייקטים מכל התורים.
כי ככה, יש נעילת יתר והקוד הופך יותר מדיי סריאלי.
ברגע שה-main thread בא וקורא כל פעם קטע קריטי קטנטן של אובייקט, זה מפחית מהקליאנטים המתנה.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   13:42   03.12.09   
אל הפורום  
  3. לא בטוח שהבנתי אותך לגמריי  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 03.12.09 בשעה 13:49 בברכה, Static
 
האקספשיין שקיבלתי התריע על כך שהיה לי TIMEOUT בשליחה ל WEB SERVICE
ה-TIME OUT התרחש בגלל שיותר מדיי קליינטים ניגשו אל ה-QUEUE היחיד וניסו לעשות לו ENQUEUE או DEQUEUE ונוצר צוואר בקבוק ועד שהוא השתחרר הרבה נתונים הלכו לאיבוד בגלל ה-TIMEOUT.

עכשיו אחרי שמימשתי LOCK על הנקודות שבהם מתבצע ENQUEUE או DEQUEUE הכל עובד יפה ואין יותר TIMEOUT, אך עדיין יש נקודות של עומס שרק קליינט אחד משתלט על התור ועובד איתו 2-3 שניות (שזה קריטי במערכת הזאת) בזמן שהאחרים מחכים.

אתה בעצם מציע לעשות לכל THREAD תור משלו?
מה הכוונה שאתה אומר שהסרבר יאסוף במחזוריות מכל התורים?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   14:10   03.12.09   
אל הפורום  
  4. שניה, אולי לא הבנתי אותי  
בתגובה להודעה מספר 3
 
מדובר ב-12 קליאנטים שונים או ב-12 קליאנטים שעובדים מול אותו סרבר ומבצעים בדיוק את אותו התפקיד?

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

בעצם יצא שלכל היותר חוט (קליאנט) יחכה לסרבר (main thread) בשביל שיוציא אובייקט (פעולה אטומית ביותר)
במקום שכל הת'רדים יגרמו ל-threshold מטורף כשכולם מנסים לתפוס את המנעול הראשי (כולל הסרבר עצמו).

שים לב אבל ששיטה זו עלולה שלא להבטיח הוגנות וגם תתכן הרעבה.
יתכן מצב שכל פעם כשניגש לתא החוט יעדכן במידע נוסף, דבר שיגרום לחניקה גם (תלוי בעומס שאתה מתכנן להעמיס).
במקרה כזה, במקום לבצע try תבצע lock שיחכה ל-thread ישסיים את הפעולה האטומית של הוספת האובייקט למערך.
האומנם עדיין לא תהיה הוגנות, אבל לא יהיה מצב של הרעבה.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   14:49   03.12.09   
אל הפורום  
  5. אני אבהיר את הנושא לעומק  
בתגובה להודעה מספר 4
 
   12 מכונות (ענקיות) לעיבוד שבבי (CNC) במפעל גדול בארץ משדרות מידע על כל פעולה שהם עושות.
לדוגמה:
1. תחילת חיתוך מתכת
2. שיוף המתכת
3. החלפת חלק.
וכו'...

השידור מהמכונות האלה נעשה בקוד EMBED לבקרה של חברת סימנס שכתבתי ב C++ ועובד מצויין (זאת מערכת שעובדת במספר מפעלים גדולים בארץ והוכיחה את עצמה). עד כאן, אין בעיות.

כל המידע עובר לסרבר שכתוב ב- C# ויושב על מחשב PC רגיל ותפקידו הוא להאזין ל12 המכונות הללו שכל מכונה מיוצגת ע"י THREAD נפרד וכל שורת מידע שהוא מקבל הוא מכניס לתור מרכזי.
כל הת'רדים עובדים בצורה זהה לחלוטין.

המידע שבתור נשלח ל WEB SERVICE ומשם נשלח ל DATABASE שנבנו ע"י חברת תוכנה אחרת ולא ממש בשליטתי.

הנה סרטוט שעשיתי בשביל להבהיר את הנושא:



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   18:03   03.12.09   
אל הפורום  
  8. אוקיי, והמספר 12 של סרברים הוא קבוע?  
בתגובה להודעה מספר 5
 
כי אם כן - שוב, אני עדיין דוגל בתשובה שלי.

תחשוב, ברגע שאתה שולח פאקטים במקביל ויש רק חוט אחד שעונה עליהם, יש פקטור עומס עיבוד של 1:12.
התור מתמלא יותר מהר מאשר הוא מספיק לעבד את הנתונים ולהתרוקן.


כמה ליבות יש ל-C# Server?
אם היו מבקשים ממני לממש מה שביקשת,
הייתי מממש מספר חוטי server בשרת הראשי כמספר הליבות,
כל חוט ידאג לחלק שונה במערך (מתוך 12 הערוצים), ובמקרה שנזקקים ל-load balance לאפשר איחוד בין חוטים או עבודה במקביל על אותו חלק במערך.
אסור שתראה שהקוד שלך כרגע בזמן עיכובים לא יאמץ את המעבד (כל הליבות) על פחות מ-100% שימוש מעבד/תקשורת מול ה-DB.

ואגב, עצם זה שהתפקידים של הקליאנטים זהים - רק מוכיח שאכן השימוש בחוטים במקום בתהליכים הוא נכון.
רק צריך להקצות להם תחומי עבודה שונים בשביל לעבוד במקביל.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   19:55   03.12.09   
אל הפורום  
  9. מצויין! אני מסכים עם מה שאתה אומר פה  
בתגובה להודעה מספר 8
 
   המספר 12 (קליינטים) הוא קבוע, במידה ויחוברו עוד מכונות בעתיד יהיה להם שרת נפרד משלהם.

אכן יש עומס עבודה של 1:12 והמעבד שיושב על השרת דיי חלש, זה בסה"כ איזה PC מצ'וקמק עם 2 ליבות דיי חלשות, אולי נמליץ ללקוח לשדרג אותו למשהו יותר רציני (אני אבדוק את העומס על המעבד ביום ראשון מהמשרד).

אני לא יודע אם 12 חוטים ב SERVER יוכלו לעזור כי בסופו של דבר הכל נשלח ל WEB SERVICE בודד. אם נרצה לייעל לא נצטרך ליצור גם 12 חוטים לסרביס???

תוכל לפרט לי קצת יותר על האיחוד בין חוטים ל- LOAD BALANCE לא נתקלתי בזה אף פעם?

בקשר למשפט האחרון שלך, עד עכשיו דיברנו רק על חוטים ולא על תהליכים אז אין פה בעייה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   20:05   03.12.09   
אל הפורום  
  10. בנוגע ל-12 קליאנטים כסטטי זה פשוט מקל את המימוש אבל  
בתגובה להודעה מספר 9
 
ערכתי לאחרונה בתאריך 03.12.09 בשעה 20:12 בברכה, ldan192
 
לא הכרחי.
ועדיין, אם מדובר ב-PC דו-ליבתי מהסוג הישן (בלי קאש משותף) קל וחומר כדאי לחלק את העבודה ל-2 חוטים במקביל.

לא הבנת אותי אבל. לא 12 חוטים בסרבר - 2 יספיקו.
אני מדבר על 12 תאים בהם הקליאנטים יעדכנו את האינפורמציה שלהם.
בצורה זו לא יווצר מצב שקליאנט אחד ימתין לאחר, אלא לכל היותר קליאנט ימתין לסרבר שיסיים קריאת אובייקט מהתור שלו.

בנוגע לחלוקת עומס,
אתה יכול נגיד ליצור מערך תורות בגודל 12.
אתה נותן לכל אחד משתנה של מיקום התחלתי ומיקום סופי (לעבוד עליו במערך per חוט) שעליו החוט יעבור באיטרציות בתחום שנתת.
את המספרים האלה תוכל לערוך לפי סך האיברים בתורות שכל חוט אחראי לטפל בהם (ע"י אלגוריתמים פשוטים יחסית כמו יחס מספר האיברים בתורות של חוט אחר מול השני).


שוב, מעל ל-2 חוטים בשרת הראשי - אין שום סיבה להשתמש במעבד דו-ליבתי.
אתה יותר תבזבז זמן על סינכרוניזציה מאשר על טיפול בתורות.

אבל שימוש במערך של תורות באורך 12, אני בטוח שיאיץ את העבודה בערך פי 4 (גם אם יהיה לך main thread יחיד).


עכשיו, בנוגע ל-DB, לא ציינת באיזה DB מדובר ואיך אתה מתקשר איתו.
בגדול אבל לכל DB יש כבר את כל המנגנונים הללו בשביל אופטימיזציות (כל סוקט שמתחבר מקבל חוט לתור משל עצמו, למשל).
אלא אם אתה מדבר על DB שתכנת אדם אחר ולא מדובר ב-SQL, אוראקל וכד'.


אם תתן דוגמא יותר קונקרטית של איך אתה מקבל הודעה מקליאנט ואיך אתה מעביר הודעה לשרת יהיה לי יותר קל להסביר לך.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   07:59   06.12.09   
אל הפורום  
  14. העלתי את חלקי הקוד הרלוונטים בקובץ TXT  
בתגובה להודעה מספר 10
 
   ממליץ לפתוח עם NOTEPAD++ או עם VS
בשורה הראשונה אפשר לראות דוגמה של מחרוזת שמגיעה מהקליינטים

ד"א זה שכתוב שם THREAD POOL 13 זה צריך להיות 12 אפשר להתעלם.

בקשר לתקשורת עם ה-DB הכל עובר דרך WEBSERVICE שבנה מישהו אחר, אני לא מתעסק איתו מלבד קריאה לסרביס בשורה הזאת: int ret = mir.MachineMessage(

https://rotter.name/User_files/nor/4b1b47922488c196.txt


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   15:38   11.12.09   
אל הפורום  
  19. טוב, זה קצת מורכב כשאין לי את כל המתודות הסטטיות  
בתגובה להודעה מספר 14
 
ערכתי לאחרונה בתאריך 11.12.09 בשעה 15:44 בברכה, ldan192
 
המורכבות ואני לא בטוח מה הן עושות.
אני מבין מהשורה הראשונה שכל קליאנט מצהיר מאיזה סרבר הוא הגיע.

אבל הינה הקונספט לקוד:

https://rotter.name/User_files/nor/4b224c2c4d51be9a.txt


שים לב עכשיו איך כל מנעול תופס קטע קוד הרבה הרבה יותר אטומי (4-5 פעולות בממוצע במקום 100).
שים לב גם שכל סוקט (מה-12/13 אפשריים) שמכניס הודעה לתור תופס מנעול לוקאלי בלבד ולא תופס את כל התור כולו.

בקיצור, זה קוד הרבה הרבה הרבה יותר נכון.
רק צריך לגרום לו לעבוד במערכת שלך ואני מבטיח לך שתראה שיפור.
מה שגם הוא עדיין לא עבר אופטימיזציות של load balance וכו', אבל זה כבר אני אשאיר לך


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   15:31   03.12.09   
אל הפורום  
  6. בעקרון לא נשמע ממש שאתה עובד נכון עם sockets.  
בתגובה להודעה מספר 0
 
באופן כללי כשאתה מנהל סרבר עם 12 קליינטים אתה אמור לטפל בבעייה שהיא מה קורה כאשר נשלח מידע סימולטנית משני קליינטים שונים (ממש בו זמנית). באופן כללי אתה גם יכול לקרוא על locks.

אני אישית מתעסק יותר עם סרברים ב-C או C++ וב-C# המון נעשה מאחורי הקלעים עד שאתה לא בטוח אם זה באמת טוב.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   15:41   03.12.09   
אל הפורום  
  7. מה בעצם אמרת פה?  
בתגובה להודעה מספר 6
 
   2 קליינטים שונים שולחים מידע בו זמנית (זה מעולם לא יקרה זה תמיד יהיה איזה חלקיק או מיקרון שנייה הבדל), אני שם LOCK על הקטע הקריטי מי שיכנס ראשון יקבל את התור השני יחכה.

קראתי על LOCKS ומימשתי, כל העסק עובד (לצורך העניין בדקתי עכשיו ומשעה 8 בבוקר ועד עכשיו עברו בהצלחה 27,000 מחרוזות מידע מהמכונות ל DB).
אני רק מנסה לחשוב איך לייעל את זה כדי שת'רד אחד לא יתפוס את התור לאורך זמן, יש כמה רעיונות אבל אני לא בטוח מי מהם הכי יעיל.

הסרבר שבניתי הוא גם WIN APPLICATION הוא מציג לוג בזמן אמת ועוד כל מיני אפשרויות שליטה כמו לכבות את ציר המידע ממכונה ספציפית כדי לא להעביר אותה למסד הנתונים ועוד אפשרויות שונות, לכן זה נבנה ב C# שהיא יותר אינטואיטיבית לתכנות חלונות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   21:23   03.12.09   
אל הפורום  
  11. locks אתה חייב, אין פה בכלל שאלה.  
בתגובה להודעה מספר 7
 
בכל אופן בנוגע למידע סימולטנית - המיקרון שנייה הבדל לא ממש משנה לתוכנה שלך, בגלל זה אתה צריך LOCKS וזה לא נכון לתכנת בלעדיהם.

לגבי התור - אתה יכול לעשות אותו פשוט מעגלי. במידה ומישהו מתעכב יותר מידי אז תכניס אותו לסוף התור.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   09:48   04.12.09   
אל הפורום  
  12. אתה צריך מנגנון של THREAD POOL זה קלאסי במקרה שלך  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   11:09   04.12.09   
אל הפורום  
  13. לא מסכים איתך. ThreadPool נועד בשביל למנוע  
בתגובה להודעה מספר 12
 
הריגת ויצירת חוטים (כי זו פעולה יקרה) כשמבצים מספר פונקציות (משימות) שונות.
כל פעם שולחים לחוט פונקציה כלשהי עם פרמטרים והוא מבצע אותה במעגליות.

זה לא המקרה פה.
הפונקציה שהחוטים מבצעים זהה,
אין לו צורך במעבר ל-2 חוטים.
המנגנון במקרה הזה רק יגרום ל-overhead גבוה.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   22:38   07.12.09   
אל הפורום  
  16. כמה דברים  
בתגובה להודעה מספר 13
 
   1. תפסיק להגיד חוטים חחחח זה נשמע כל כך רע
2. אני בכלל לא דיברתי על מספר הthreads
thread pool יכול בהחלט גם להיות בעל הקצאה ל2 threads (וזה ידוע שבד"כ מומלץ 2 threads per core
3. אני מדבר פה על thread pool לשם תעדוף - שזו גם אחת המטרות של ה thread pool לתעדף משימות - ככה הוא יוכל להגיע לרמת ביצועים גבוהה יותר ולהקצות את ה threads בהתאם לחשיבות המשימה והזמן הדרוש לה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   00:24   08.12.09   
אל הפורום  
  17. בנוגע ל-3, שוב לא מסכים, כי זה מה שהוא עושה כרגע  
בתגובה להודעה מספר 16
 
דוחף מלא הודעות לתור יחיד וגורר שכל החוטים צריכים להסתנכרן בינם ובין עצמם בשביל לגשת לתור ולהוציא ממנו מידע חדש, שזה כמובן גרוע מאוד, ורוב הסיכויים שהקוד עובד/יעבוד יותר לאט אפילו מאשר סריאלי בגלל ה-overhead של הסנכרונים.

זה שכל הזמן אנשים משתמשים ב-thread_pool, לא אומר שאנשים מתכנתים נכון בריבוי חוטים (ככה המרצה שלי טוען, מי אני שאתווכח איתו)
מעטים המתכנתים שבאמת יודעים לעבוד עם ריבוי חוטים, ואלה בדר"כ האנשים שעובדים באינטל, IBM וכו'.
ובכלל, זה שהקוד עובד לא אומר שהוא עובד נכון.

מה שאני הצעתי זה הפתרון שהכי קל למימוש ויהיה מהיר פי כמה וכמה מאשר המימוש הנוכחי.


בנוגע לקוד שלך, static, יצא לי לעבור עליו רק לקראת הסופ"ש,
אבל בינתיים נסה לממש מה שאמרתי.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   09:33   08.12.09   
אל הפורום  
  18. תודה, אני אשמח אם יהיה לך זמן לעבור על הקוד ולהציע יעול  
בתגובה להודעה מספר 17
 
   ברגע שתוכל לעבור על הקוד תעדכן אותי, אני אשמח לראות את הרעיונות שלך לשיפור


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   08:01   06.12.09   
אל הפורום  
  15. אני כבר עובד עם THREAD POOL  
בתגובה להודעה מספר 12
 
  


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

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

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



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