logo

תהליך לעומת שרשור | ההבדל בין תהליך לחוט

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

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

תהליך לעומת פְּתִיל

מה זה תהליך?

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

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

לעשות בזמן ג'אווה
תהליך לעומת פְּתִיל

תהליך במערכת ההפעלה יכול להישאר בכל אחד מהמצבים הבאים:

    חָדָשׁ: תהליך חדש נוצר.מוּכָן: תהליך מוכן וממתין להקצאה למעבד.רץ: התוכנית מבוצעת.הַמתָנָה: מחכה לאירוע כלשהו שיתרחש או יתרחש.נסגר: הביצוע הסתיים.

איך עובדים תהליכים?

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

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

תכונות של תהליך

  • בכל פעם שאנו יוצרים תהליך, עלינו לבצע קריאת מערכת נפרדת עבור כל תהליך למערכת ההפעלה. ה מזלג פונקציה () יוצרת את התהליך.
  • כל תהליך קיים בתוך כתובת או מרחב זיכרון משלו.
  • כל תהליך הוא עצמאי ומתייחס אליו כתהליך מבודד על ידי מערכת ההפעלה.
  • תהליכים זקוקים ל-IPC (Inter-process Communication) על מנת לתקשר אחד עם השני.
  • אין צורך בסנכרון נכון בין תהליכים.

מה זה חוט?

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

תהליך לעומת פְּתִיל

איך עובד חוט?

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

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

סוגי חוטים

ישנם שני סוגי חוטים, שהם:

1. שרשור ברמת משתמש

מחרוזות מיון java

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

אלה מהירים יותר, קלים ליצירה ולניהול.

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

השרשורים ברמת המשתמש מיושמים על ידי ספריות ברמת המשתמש, לא על ידי קריאות המערכת.

2. חוט ברמת ליבה

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

להגדיר מחשב

תכונות של חוט

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

ההבדלים העיקריים בין תהליך לחוט

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

טבלת ההבדלים בין תהליך לחוט

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