Как time.sleep меняет результат этой программы, которая использует каналы - PullRequest
0 голосов
/ 25 января 2019

Я новичок в Го и занимаюсь некоторыми практиками с книгой "Маленькая книга Го" из главы Параллелизм. Я не могу понять, что происходит, удаляя time.Sleep(time.Millisecond * 50), который изменяет вывод, выводя только результаты печати для "работника 4".

 package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    c := make(chan int)
    for i := 0; i < 5; i++ {
        worker := &Worker{id: i}
        go worker.process(c)

    }
    for {
        c <- rand.Int()
        time.Sleep(time.Millisecond * 50) // ???
    }
}

type Worker struct {
    id int
}

func (w *Worker) process(c chan int) {
    for {
        data := <-c
        fmt.Printf("worker %d got %d\n", w.id, data)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...