דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. אשמח לעזרה בהבנת הסבר לקוד go

אשמח לעזרה בהבנת הסבר לקוד go

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 274 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #1

    כאן יש הסבר והדגמה מעולים
    ניהול הרצת אותה פונקציה פעמיים על 2 תהליכונים

    אני אבל לא מבין מדוע התוצאה
    world
    hello
    hello
    world
    world

    ולא
    world
    hello
    world
    hello
    world
    hello

    הרי הם מדפיסים בהפרשים שווים
    רק שיש בניהם את הרגע בין ההרצה של תהליך 1 להרצה של תהליך 2?!

    תגובה 1 תגובה אחרונה
    0
    • yossizY מנותק
      yossizY מנותק
      yossiz
      כתב ב נערך לאחרונה על ידי
      #2

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

      1 func say(s string) {
      2 	for i := 0; i < 5; i++ {
      3 		time.Sleep(100 * time.Millisecond)
      4 		fmt.Println(s)
      5 	}
      6 }
      7 
      8 func main() {
      9 	go say("world")
      10	say("hello")
      11}
      
      • סביבת ההרצה מגיעה לשורה 9 ומייצר goroutine - נקרא לו GR2, ול-thread הראשי נקרא GR1. עכשיו (נניח שהכל רץ על ליבה פיזי אחד) צריך החלטה מה-scheduler אם להריץ GR2 או GR1.
      • כנראה ש-GR2 מקבל קדימה והוא רץ עד שורה 3 ועד בכלל וכאן הוא עוצר ומעביר שליטה ל-GR1.
      • GR1 רץ עד לשורה 3 ועד בכלל
      • עוברים 100ms עבור GR2 וה-scheduler מריץ שורה 4 ב-GR2. זה מדפיס world.
      • עכשיו יש שוב פעם החלטה אם להמשיך GR2 ולהריץ שורה 2 ו-3, או לחזור ל-GR1 שכבר עברו לו 100ms
      • כנראה שה-scheduler מחליט לחזור ל-GR1 ולהריץ שורה 4. עכשיו נדפס המילה "hello".
      • עכשיו צריך שוב פעם החלטה איזה goroutine להריץ. וכנראה שהפעם הפור נופל על להמשיך את ההרצה של GR1, במקום לעשות context switch שהוא דבר יחסית יקר. כך ש-GR1 מתחיל את ה-sleep לפני GR2.
      • וחוזר חלילה

      כנראה, ש-thread שסיים זה עתה sleep מקבל קדימה על פני thread שסתם הפסיק באמצע הרצה כדי לתת צ'אנס לשני.

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      5

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום