מקבילות
אני הייתי שמח לקבל עצות וכיוונים לבעיה הבאה. מה שאני רוצה לעשות הוא כזה: יש לי קובץ ממש גדול. ממש ממש גדול
(כמה ג'יגות נניח). אני מעוניין לקרוא ממנו באפרים בגדלים שונים (גודל כל באפר נקבע ע"י ארבעת הבתים הראשונים שלו) ולעשות עיבוד על כל באפר. נניח לצורך העניין שעל כל באפר אני מבצע את אותו עיבוד. מכיוון שיש לי יותר ממעבד אחד אני רוצה לפתוח thread נוסף (או אולי יותר מאחד) וכל זה כדי להאיץ כמה שאפשר את העיבוד של הקובץ. נניח יהיה לי thread שקורא מהקובץ באופן א-סינכרוני (overlapped IO) ועוד thread-ים נוספים שמבצעים את העיבוד על הבאפרים. אני חשבתי להשתמש ב completion ports, כך שאני דוחף כל באפר (מצביע לבאפר מן הסתם) לתור, וכל thread שמסיים עיבוד לוקח באפר נוסף. יש לי כמה שאלות: 1. האם יש דרכים יותר מתוחכמות לעשות את זה, ואיך למעשה ממשים completion ports. 2. overlapped io: האם זה לא יפתח לי למעשה thread נוסף? 3. מה אם חשוב לי הסדר של הבאפרים? (נניח שכל thread רושם את העיבוד שלו לקובץ משותף) 4. עכשיו בעוד אני כותב שורות אלה חשבתי על עוד משהו שיפתור את (3): thread נוסף שיהיה אחראי על הכתיבה לקובץ ולמעשה הוא ידעה מתי כל thread לוקח באפר וייתן לו מספר בתור (מצידי שיהיה מספר סידורי רץ) ויהיה אחראי לסדר את הבאפרים... מה אתם חושבים? 5. ועכשיו וסוגיה היותר קשה: אני רוצה גם שיהיה לי פיקוח על עומסים. נניח אם הthread שקורא מהקובץ קורא מהר מאוד, ומצטבר הרבה מאוד מידע באחרים, אני רוצה שהוא גם יתחיל לעבד מידע. נניח על כל 10 באפרים שהוא קורא, שיעבד אותם. אבל הוא גם חייב לקחת מה completion ports, הוא לא יכול לשמור אותם לעצמו אלא לדחוף אותם לתור ולהוציא בזמנו הפנוי. ???
אני הייתי שמח לקבל עצות וכיוונים לבעיה הבאה. מה שאני רוצה לעשות הוא כזה: יש לי קובץ ממש גדול. ממש ממש גדול