ערכתי לאחרונה בתאריך 03.12.09 בשעה 20:12 בברכה, ldan192
לא הכרחי.
ועדיין, אם מדובר ב-PC דו-ליבתי מהסוג הישן (בלי קאש משותף) קל וחומר כדאי לחלק את העבודה ל-2 חוטים במקביל.לא הבנת אותי אבל. לא 12 חוטים בסרבר - 2 יספיקו.
אני מדבר על 12 תאים בהם הקליאנטים יעדכנו את האינפורמציה שלהם.
בצורה זו לא יווצר מצב שקליאנט אחד ימתין לאחר, אלא לכל היותר קליאנט ימתין לסרבר שיסיים קריאת אובייקט מהתור שלו.
בנוגע לחלוקת עומס,
אתה יכול נגיד ליצור מערך תורות בגודל 12.
אתה נותן לכל אחד משתנה של מיקום התחלתי ומיקום סופי (לעבוד עליו במערך per חוט) שעליו החוט יעבור באיטרציות בתחום שנתת.
את המספרים האלה תוכל לערוך לפי סך האיברים בתורות שכל חוט אחראי לטפל בהם (ע"י אלגוריתמים פשוטים יחסית כמו יחס מספר האיברים בתורות של חוט אחר מול השני).
שוב, מעל ל-2 חוטים בשרת הראשי - אין שום סיבה להשתמש במעבד דו-ליבתי.
אתה יותר תבזבז זמן על סינכרוניזציה מאשר על טיפול בתורות.
אבל שימוש במערך של תורות באורך 12, אני בטוח שיאיץ את העבודה בערך פי 4 (גם אם יהיה לך main thread יחיד).
עכשיו, בנוגע ל-DB, לא ציינת באיזה DB מדובר ואיך אתה מתקשר איתו.
בגדול אבל לכל DB יש כבר את כל המנגנונים הללו בשביל אופטימיזציות (כל סוקט שמתחבר מקבל חוט לתור משל עצמו, למשל).
אלא אם אתה מדבר על DB שתכנת אדם אחר ולא מדובר ב-SQL, אוראקל וכד'.
אם תתן דוגמא יותר קונקרטית של איך אתה מקבל הודעה מקליאנט ואיך אתה מעביר הודעה לשרת יהיה לי יותר קל להסביר לך.
בברכה,
עידן