בחלונות לא מבדילים בין פעולה לא חוסמת לפעולה אסינכרונית

כן, עוד פוסט טכני.

כאשר מבצעים פעולות קבצים/sockets ביוניקס, נהוג להבדיל בין מספר סוגי פעולות. השאלה הראשונה שיש לשאול היא “האם הפעולה חוסמת” (blocking). פעולה חוסמת היא פעולה שלא חוזרת עד שהפעולה הושלמה. לצורך הדוגמא, דמיינו את המצב הבא. אנחנו מבקשים לכתוב לחיבור TCP/IP, מה שדורש שחלק מה-buffer שלנו ייכתב לחיבור. הבעיה היא שהצד השני של התקשורת מגיב לאט, מה שאומר שמידע קודם שכתבנו עוד לא קיבל אישור מהצד השני, והוא ממתין בצד שלנו. במצב כזה עלול להיות מצב שבו אין לשכבת ה-TCP/IP שלנו מקום לנתונים הנוספים שאנחנו מנסים לכתוב. אם אנחנו משתמשים בפעולה חוסמת מה שיקרה בשלב הזה זה שהתוכנית שלנו תמתין עד שהצד השני ייאשר קצת נתונים קודמים, מה שיפנה חוצצים, מה שיאפשר לקבל את הנתונים החדשים שאנחנו מנסים לכתוב ולשחרר את פעולת הכתיבה שלנו. אנחנו חסומים מלהמשיך בביצוע התוכנית עד שהמידע (לפחות חלקו) מתקבל.
להמשיך לקרוא בחלונות לא מבדילים בין פעולה לא חוסמת לפעולה אסינכרונית

Bear