目录
目录
一:并发和并行
首先我们需要分清并发和并行的区别,并发是多线程在一个CPU里运行,并行就是多线程在多个CPU里面运行
二:go协程和go主线程
协程其实就是轻量级的线程,一个线程可以有多个协程,这个线程就是主线程
协程的特点:
1:有独立的栈空间
2:共享程序堆空间
3:调度由用户控制
4:协程是轻量级的线程
三:代码实现
package main
import (
"fmt"
"strconv"
"time"
)
func test() {
for i := 1; i <= 10; i++ {
fmt.Println("test hello,world " + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
func main() {
go test() //开启一个协程,main和test同时执行
for i := 1; i <= 10; i++ {
fmt.Println("main hello,world " + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
四:goroutine调度模型---MGP模型
M: 操作系统的主线程
G:协程
P :协程执行所需的上下文