חזרה
Go concurrency distilled: ספרון חינמי על מקביליוּת ב-Go
SiTech AI Team2 წთ. საკითხავი

Go concurrency distilled: ספרון חינמי על מקביליוּת ב-Go

אנטון ז׳יז׳יאנוב פרסם ספרון חינמי בשם «Go concurrency distilled»: תזכורת מהירה לתכנות מקבילי ב-Go, מגורוטינות וערוצים ועד context, מנעולים, פעולות אטומיות ודיאגנוסטיקה בפרודקשן, עם דוגמאות אינטראקטיביות.

אנטון ז׳יז׳יאנוב, מחבר הבלוג antonz.org על Go, פרסם ב-26 בספטמבר ספרון חינמי בשם «Go concurrency distilled». המחבר מגדיר אותו כתזכורת מהירה לתכנות מקבילי ב-Go ולא כקורס למתחילים: את היסודות, כולל תרגילים מעשיים, מלמד ספרו הקודם «Gist of Go: Concurrency». הספר החדש, לדברי המחבר, נכתב בלי AI.

הטקסט המלא זמין בדפדפן עם דוגמאות אינטראקטיביות: אפשר לערוך את הקוד בכל קטע ולהריץ אותו ישירות בעמוד. גרסת PDF עם דוגמאות סטטיות נמצאת במאגר nalgeon/go-conc-distilled ב-GitHub.

מ-goroutines ל-pipelines

הפרקים הראשונים מכסים את היסודות: goroutines שמופעלות במילת המפתח go, קבוצות המתנה (wait groups) לסנכרון ביניהן, ותעלות (channels) שדרכן goroutines מעבירות ערכים זו לזו — לא-מאוחסנות ומאוחסנות, סגורות ו-nil. אחר כך מגיע select, שמנהל זרימות נתונים, מבטל goroutines ומבצע פעולות לא-חוסמות.

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

זמן, context וסנכרון

לזמן מוקדש פרק משלו: time.After לפסקי זמן, טיימרים לעבודה דחויה ו-tickers למשימות תקופתיות, עם עצה לאפס טיימר יחיד בלולאה במקום ליצור חדש בכל איטרציה. את context, שתפקידו המרכזי לבטל פעולות ידנית, בפסק זמן או במועד אחרון, מסבירים יחד עם המבנה השכבתי שלו: context בן יכול לקצר רק את המועד של ההורה, וריבוי קריאות cancel בטוח. הפרק כולל גם סיבות ביטול מותאמות ופונקציות ניקוי דרך context.AfterFunc.

אחריהם הפרימיטיבים של הסנכרון: wait groups עם המתודה החדשה של Go, mutexes עם TryLock ו-RWMutex, סמפורים, משתני תנאי עם signal ו-broadcast, sync.Once, sync.Pool להקלת עומס על אוסף הזבל ופעולות אטומיות. המחבר מדגיש את ההבדל בין data race, שאותו תופס race detector עם הדגל -race, לבין race condition, שאותו הוא אינו תופס.

בדיקות, תזמון ודיאגנוסטיקה

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

הפרקים האחרונים עוסקים במתזמן, שמפזר goroutines בין תהליכי מערכת ההפעלה (goroutine צורכת כ-2KB מחסנית), ובדיאגנוסטיקה בפרודקשן: חבילת runtime/metrics, מנתח pprof עם פרופילי CPU, heap, goroutine, block ו-mutex, tracing עם go tool trace ו-flight recording, ששומר טרייס עדכני בחלון מחליק.

SSiTech

SiTech — פיתוח אתרים בכוח ה-AI

אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.