this article about concurrency and parallelism in Go
,我遇到了这样一种说法:
我们可以看到goroutines是真正并行运行的。两者
为了展示他们的成果而竞争标准。
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
那么,这是否意味着在运行时,goroutines同时执行2个周期(因此,此时我们可以调用Go parallel language)或scheduler只是在这两个线程之间切换上下文(可能是on格式打印F一次只执行一个循环(并发,不是真正的并行,正如作者在上面的引文中提到的)?