שאלה - multi-threadאו multi-process

GilBates

New member
שאלה - multi-threadאו multi-process

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

galh

New member
לא עושים. ../images/Emo3.gif

זה יתן לך יתרון רק אם יש לך יותר ממעבד אחד במחשב.
 

GilBates

New member
אבל יש לי בעיה לעבוד עם קבצים

גדולים.. מ-2 סיבות: 1. תופסים לי הרבה מאוד זכרון 2. כל פעולה על קובץ גדול היא איטית מאוד. (יותר זול לי לבצע 5 פעולות על קובץ של 5 מ"ב מאשר פעולה אחת על קובץ של 25 מ"ב) ככה אוכל לטפל בכל חלק בנפרד ולצרוך פחות זכרון ורק בסוף לאחד. מה דעתך?
 

galh

New member
הדעה שלי קצת מבולבלת בגללך.

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

GilBates

New member
תודה, זה מה שאני מתכוון לעשות

הקובץ הוא בינארי. יש המלצות איך הכי כדאי לעשות את זה?
 

galh

New member
בינארי הכי טוב. ../images/Emo13.gif

תקרא X רשומות מהקובץ כך ש-
X * sizeof(record) = 8K​
זה כלל אצבע, אפשר לנסות גם גדלים אחרים כמו 4K או 32K. אחר כך תעשה לולאה שעוברת על הבאפר שלך ועושה חישוב על כל אחת מהרשומות. אם משעמם לך, אפשר לעבוד עם threads. אחד שקורא מהקובץ ומכניס לרשימה מקושרת (כמה בבת אחת) והשני קורא כל פעם רשומה ועושה חישוב. אבל זה יותר לתירגול ופחות מעשי במקרה שלך.
 

GilBates

New member
אין לי רשומות אלא אני עובד על הקובץ

בצורתו הגולמית (בתים). מדוע פחות מעשי לעבוד עם THREADS ?
 

galh

New member
אם אין רשומות, אז אין לך מידע.

מה מייצג כל בייט בדיוק? איזה סטטיסטיקה אתה אוסף, כמה בייטים יש בקובץ ומה הממוצע שלהם? אני מניח שאתה עובד עם מידע. המידע מורכב מכמה שדות (אחד או יותר) שחוזרים על עצמם עם ערכים שונים. זו הרשומה שלך. לגבי ה- thread-ים... השימוש בהם טוב כאשר האפליקציה שלך צריכה לעשות כמה דברים בו זמנים ואתה לא רוצה לחסום (blocking בלעז) אותה. התוכנה שלך לא צריכה threads כי יש לה רק פעולה אחת (אלא אם זו לא console ויש לך GUI).
 

GilBates

New member
אני אכן אוסף סטטיסטיקה לגבי

התפלגות של בייטים בקובץ. זה לצורך פרויקט אחר ב-COMPRESSION
 

galh

New member
אני והשטויות שלי. ../images/Emo163.gif ../images/Emo13.gif

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