Я недавно много читал о параллелизме и параллелизме в Go, и я не могу обернуть это вокруг.Когда я читал эту статью о параллелизме и параллелизме в Go , я сталкивался с этим утверждением:
Мы видим, что программы действительно работают параллельно.Обе программы запускаются немедленно, и вы можете увидеть, как они борются за стандарт, чтобы показать свои результаты.
Это утверждение относится к этой программе:
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
runtime.GOMAXPROCS(2)
var wg sync.WaitGroup
wg.Add(2)
fmt.Println("Starting Go Routines")
go func() {
defer wg.Done()
for char := ‘a’; char < ‘a’+26; char++ {
fmt.Printf("%c ", char)
}
}()
go func() {
defer wg.Done()
for number := 1; number < 27; number++ {
fmt.Printf("%d ", number)
}
}()
fmt.Println("Waiting To Finish")
wg.Wait()
fmt.Println("\nTerminating Program")
}
Какие выводы:
Starting Go Routines
Waiting To Finish
a b 1 2 3 4 c d e f 5 g h 6 i 7 j 8 k 9 10 11 12 l m n o p q 13 r s 14
t 15 u v 16 w 17 x y 18 z 19 20 21 22 23 24 25 26
Terminating Program
Значит ли это, что во время выполнения 2 цикла выполняются из одновременного выполнения подпрограмм (так что в этот момент мы можем назвать Go параллельным языком) или планировщик просто переключает контекст между этими двумя потоками (возможно,на вызов fmt.Printf) и выполнение только одного цикла за один (параллелизм, а не истинный параллелизм, как автор упомянул в приведенной выше цитате)?
Я в замешательстве.