package main
import (
"fmt"
"time"
)
var numChan chan int
var labelChan chan string
func main() {
input := []int{3, 1, 8, 0, 7, 5, 9, 2}
numChan = make(chan int)
labelChan = make(chan string)
go func() {
labelsReceiver(labelChan)
}()
// убрал отсюда time.Sleep(time.Millisecond)
go func() {
labelsEmitter(numChan, labelChan)
}()
for _, num := range input {
fmt.Println(num)
numChan <- num
}
time.Sleep(time.Second * 5)
close(numChan)
close(labelChan)
}
func labelsEmitter(numbers chan int, outChan chan string) {
fmt.Println("go labelsEmitter")
for num := range numbers {
time.Sleep(time.Millisecond * 250)
str := fmt.Sprintf("Number %d", num)
outChan <- str
}
}
func labelsReceiver(labelChanRcv <-chan string) {
fmt.Println("go labelsReceiver")
for label := range labelChanRcv {
fmt.Println(label)
}
}
wg.Add(1)
go func() {
defer wg.Done()
labelsReceiver(outChan)
}()
wg.Wait()
и получаю снова deadlock.time.Sleep(time.Millisecond)
теперь не нужна. go func() {
labelsReceiver(labelChan)
}()
time.Sleep(time.Millisecond) // Так попытался убедиться, что получатель стартует первым. Не знаю как правильно сделать.
go func() {
labelChan = labelsEmitter(numChan)
}()
1-я является получателем, 2-я отправителем.go func(c <-chan string) {
labelsReceiver(c)
}(labelChan)
This certainly looks as a kernel issue. Atop retrieves the disk metrics from /proc/diskstats that contains one line with counters per disk
Но мне уже объяснили специалистыА кто эти специалисты? Может, у них конфликт интересов?