תהליך לעומת שרשור
כדי לאפשר למחשבים לבצע יותר מפעילות אחת בו-זמנית, גם התהליך וגם השרשור מספקים שירות מעולה, אבל יש הבדל ביניהם באופן שבו הם פועלים. כל התוכניות הפועלות במחשב משתמשות לפחות בתהליך או שרשור אחד. תהליך והשרשור מאפשרים למעבד לעבור בצורה חלקה בין מספר משימות תוך שיתוף משאבי המחשב. לכן חובתו של מתכנת להשתמש בחוטים ובתהליכים בצורה יעילה כדי ליצור מעבד עם ביצועים גבוהים. היישום של שרשורים ותהליכים משתנה בהתאם למערכת ההפעלה הזמינה.
מהו תהליך?
תהליך, באופן כללי, הוא סדרה מתמשכת של פעולות להשגת תוצאה ספציפית. אבל, בעולם המחשבים, תהליך הוא מופע של תוכנית מחשב שמבצעת. במילים אחרות, זהו רעיון של מופע יחיד של תוכנית מחשב פועלת. פשוט תהליכים מריצים קבצים בינאריים המכילים שרשור אחד או יותר.
לפי מספר השרשורים המעורבים בתהליך, ישנם שני סוגים של תהליכים. הם תהליכים חד-חוטים ותהליכים מרובי חוטים. כפי ששמו מרמז, תהליך חוט בודד הוא תהליך שיש לו רק חוט אחד. לכן, השרשור הזה הוא תהליך, ויש רק פעילות אחת שקורה. בתהליך מרובה חוטים, יש יותר משרשור אחד, ויש יותר מפעילות אחת שמתרחשת.
שני תהליכים או יותר יכולים לתקשר אחד בתוך השני באמצעות תקשורת בין תהליכים. אבל זה די קשה וצריך יותר משאבים. בעת ביצוע תהליך חדש מתכנת צריך לעשות שני דברים.הם שכפול של תהליך האב והקצאת זיכרון ומשאבים לתהליך החדש. אז זה ממש יקר.
מהו שרשור?
בעולם ה-IT, שרשור הוא הביצוע הקטן ביותר של הוראות של תוכנת מחשב שניתן לנהל באופן עצמאי לפי לוח זמנים. חוט הוא נתיב פשוט של ביצוע בתוך תהליך. חוט הוא חזק כמו תהליך כי חוט יכול לעשות כל מה שתהליך יכול לעשות. חוט הוא תהליך קל משקל וצריך רק פחות משאבים. שרשורים יכולים לקרוא ולכתוב לאותם משתנים ומשתנה מבני נתונים. שרשור יכול לתקשר בין שרשורים בקלות.
היום ריבוי השרשורים הפך לגישה טבעית לבעיות רבות. יצירה גדולה מחולקת לחלקים וכל אחד מהם מוקצה ליחידת ביצוע הנקראת חוט. זה פשוט ריבוי שרשורים. זה מצריך תכנות קפדני מכיוון ששרשורים חולקים מבני נתונים שמשתנים על ידי שרשור אחר בכל פעם וגם בגלל שרשורים חולקים את אותו מרחב כתובות.יתרון נוסף של שרשורים הוא שהשרשורים מספקים דרך יעילה ויעילה להשגת מקביליות. ניתן להגדיל את התפוקה של מערכת על ידי מתן שרשורים מרובים לרוץ על מספר מעבדים מכיוון שהשרשור הוא ישות הניתנת לתזמון עצמאי.
Mutli-threading
מה ההבדל בין תהליך לשרשור?
• תהליכים קשים ליצירה מכיוון שהם זקוקים לשכפול של תהליך האב והקצאת זיכרון, בעוד שרשורים קל ליצור מכיוון שהם אינם דורשים מרחב כתובות נפרד.
• שרשורים משמשים למשימות פשוטות בעוד שתהליכים משמשים למשימות כבדות משקל, כגון ביצוע של יישום.
• תהליכים אינם חולקים את אותו מרחב כתובות, אבל שרשורים בתוך אותו תהליך חולקים את אותו מרחב כתובות.
• תהליכים אינם תלויים זה בזה, אך שרשורים תלויים זה בזה מכיוון שהם חולקים את אותו מרחב כתובות.
• תהליך יכול להיות מורכב משרשורים מרובים.
• מאחר שרשורים חולקים את אותו מרחב כתובות, זיכרון וירטואלי משויך רק לתהליכים אך לא לשרשורים. אבל מעבד וירטואלי מובהק משויך לכל שרשור ושרשור.
• לכל תהליך יש קוד ונתונים משלו, בעוד שרשורי התהליכים חולקים את אותם קוד ונתונים.
• כל תהליך מתחיל בשרשור ראשי, אבל הוא יכול ליצור שרשורים נוספים במידת הצורך.
• מעבר ההקשר בין תהליכים איטי בהרבה מהמעבר ההקשר בין שרשורים של אותו תהליך.
• לשרשורים יכולים להיות גישה ישירה למקטעי הנתונים שלהם, אבל לתהליכים יש עותק משלהם של מקטעי נתונים.
• לתהליכים יש תקורה אבל לא שרשורים.
סיכום:
תהליך לעומת שרשור
תהליך וחוט הן שתי טכניקות המשמשות מתכנתים על מנת לשלוט במעבד ובביצוע ההוראות במחשב בצורה יעילה ואפקטיבית. תהליך יכול להכיל מספר שרשורים. שרשורים מספקים דרך יעילה לשיתוף זיכרון למרות שהוא מפעיל מספר ביצועים מאשר תהליכים. לכן, חוטים הם חלופה לתהליכים מרובים. עם המגמה הגוברת של מעבדים מרובי ליבות, פתילים יהפכו לכלי החשוב ביותר בעולם המתכנתים.