חנות און ליין לטכנאים

«חזרה לאינדקס המונחים

הסבר מפורט

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

דמיינו שף שמבשל ארוחה ‍:

  1. השף מתחיל את המרק, ואז בזמן שהוא מתבשל (ממתין), הוא קוצץ ירקות לסלט.
  2. לאחר מכן, בזמן שהתנור מתחמם מראש (ממתין), הוא מכין את הקינוח.

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

שימוש ומטרה

מקביליות משמשת בעיקר כדי:

סוגי מקביליות

מקביליות מושגת באמצעות מספר מנגנונים עיקריים:

סוג מנגנון איך זה עובד דוגמה
ריבוי תהליכונים מספר תהליכונים (Threads – תת-תהליכים) בתוך תהליך בודד. תהליכונים חולקים את אותו מרחב זיכרון, מה שהופך את התקשורת למהירה אך את התיאום למסובך. מנוהל על ידי מערכת ההפעלה או סביבת הריצה של השפה. מעבד תמלילים: תהליכון אחד שומר את המסמך, תהליכון שני בודק איות, ושלישי מטפל בקלט משתמש.
ריבוי תהליכים מספר תהליכים עצמאיים פועלים. לכל תהליך יש מרחב זיכרון נפרד משלו. תקשורת דורשת יותר תקורה (כמו צינורות או שקעים) אך מספקת בידוד ויציבות טובים יותר. שרת אינטרנט שמפעיל תהליך חדש כדי לטפל בכל חיבור לקוח ייחודי.
קלט/פלט א-סינכרוני משימות שאינן נחסמות בזמן המתנה לקלט/פלט (Input/Output). משימה מתחילה פעולת קלט/פלט (כמו קריאת רשת) ומייד אומרת למערכת לקרוא לה בחזרה כשהנתונים מוכנים, ובכך משחררת את התהליכון הראשי לעבודה אחרת. Node.js או asyncio של פייתון: יישום ווב מטפל ב-100 בקשות ללא 100 תהליכונים, על ידי השהיית בקשה בזמן שהיא ממתינה לתשובה מבסיס נתונים והתחלת הבקשה הבאה.

איך עובדת מקביליות (במעבד בודד)

במחשב בעל ליבת מעבד אחת בלבד, ביצוע סימולטני אמיתי אינו אפשרי. במקום זאת, מקביליות מושגת באמצעות חיתוך זמן (Time-Slicing):

  1. מתזמן מערכת ההפעלה (OS Scheduler) מקצה פרוסת זמן קטנה (כמה אלפיות שנייה) למשימה א'.
  2. משימה א' רצה למשך הפרוסה הזו.
  3. מערכת ההפעלה עוצרת (Preempts) את משימה א' ושומרת את מצבה הנוכחי.
  4. מערכת ההפעלה מקצה פרוסת זמן למשימה ב', שרצה.
  5. החלפת ההקשר (Context Switching) המהירה הזו בין משימה א', ב', ג' וכו', גורמת למשתמש להיראות כאילו כל המשימות רצות בו זמנית.

על מספר מעבדים/ליבות (Parallelism – מקבילוּת)

אם למחשב יש מספר ליבות, מערכת ההפעלה יכולה לתזמן את משימה א' על ליבה 1 ואת משימה ב' על ליבה 2. זוהי מקבילוּת (Parallelism) אמיתית – משימות רצות סימולטנית. מקביליות (Concurrency) מאפשרת מקבילוּת (Parallelism), אך מקביליות היא מושג רחב יותר שפועל גם על ליבות בודדות.

יתרונות וחסרונות

 

מאפיין יתרונות (Pros) חסרונות (Cons)
ביצועים ✅ שיפור ברוחב הפס (יותר עבודה שנעשית) ובתגובתיות (חווית משתמש מהירה יותר). ❌ מורכבות מוגברת באיתור באגים ובדיקות עקב סדר ביצוע לא דטרמיניסטי.
משאבים ✅ ניצול טוב יותר של זמן המעבד על ידי אי-חוסר פעולה בזמן המתנות לקלט/פלט. ❌ תקורה (Overhead) מהחלפת הקשרים בין משימות, אשר צורכת משאבי מעבד.
קוד ✅ מאפשר פירוק בעיות מורכבות ליחידות קטנות ועצמאיות. ❌ סיכון לתנאי מרוץ (Race Conditions) ומבוי סתום (Deadlocks).

תנאי מרוץ (Race Condition): כאשר שתי משימות מקביליות מנסות לקרוא ולכתוב פיסת נתונים משותפת באותו זמן, והתוצאה הסופית תלויה בזו שמסיימת אחרונה (תוצאה לא מכוונת).

מבוי סתום (Deadlock): כאשר שתי משימות או יותר תקועות לנצח מכיוון שכל אחת ממתינה שהשנייה תשחרר משאב (לדוגמה, משימה א' מחזיקה במשאב 1 ומחכה למשאב 2; משימה ב' מחזיקה במשאב 2 ומחכה למשאב 1).

«חזרה לאינדקס המונחים