今天是 goroutine 相关的知识点
并发和并行
并发是指多线程程序在一个核的 CPU 上执行,并行是指多线程程序在多个核的 CPU 上执行。
Go 协程
Goroutine 就是 Go 协程,是用户态的轻量级线程,在栈上是 KB 级别的。线程是内核态的概念,一个线程里可以跑多个协程,在栈上是 MB 级别的。
来个例子:
package main
import (
"fmt"
"time"
)
func hello(i int) {
fmt.Println("hello goroutine : " + fmt.Sprintf(string(i)))
}
func main() {
for i := 0; i < 5; i++ {
go func(j int) {
hello(j)
}(i)
}
time.Sleep(time.Second)
}
运行结果如下:
hello goroutine :
hello goroutine :
hello goroutine :
hello goroutine :
hello goroutine :
有点小问题,格式转换的时候数字不知道转换成什么了。
预期是可以看到输出的数字是不按顺序的,因为这里的 go 关键字开了协程。