Учитывая следующий код:Параллельная обработка в golang
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
for i := 0; i < 3; i++ {
go f(i)
}
// prevent main from exiting immediately
var input string
fmt.Scanln(&input)
}
func f(n int) {
for i := 0; i < 10; i++ {
dowork(n, i)
amt := time.Duration(rand.Intn(250))
time.Sleep(time.Millisecond * amt)
}
}
func dowork(goroutine, loopindex int) {
// simulate work
time.Sleep(time.Second * time.Duration(5))
fmt.Printf("gr[%d]: i=%d\n", goroutine, loopindex)
}
Могу ли я считать, что функция «DoWork» будет выполняться параллельно?
Является ли это правильным способом достижения параллелизма или лучше использовать каналы и отдельных рабочих «доков» для каждого горутина?
На всякий случай кто-то сочтет это интересным: [Эта статья] (http://www.golangpatterns.info/concurrency/parallel-for-loop) объясняет, как делать парал el для петель в Go. – rath
@rath Большое спасибо - этот сайт окажется для меня фантастическим ресурсом! –