GO语言基础(四) | 青训营

72 阅读1分钟

1.goroutine

与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”。可以轻松创建上万个而不会导致系统资源衰竭。而线程和进程通常很难超过1万个。这也是协程别称“轻量级线程”的原因。

一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源

Go 在语言级别支持协程,叫goroutine。Go 语言标准库提供的所有系统调用操作(包括所有同步IO操作),都会出让CPU给其他goroutine。这让轻量级线程的切换管理不依赖于系统的线程和进程,也不需要依赖于CPU的核心数量。

GMP:

image.png

调度器:

image.png

image.png

image.png

handoff机制:

image.png

work stealing机制:

image.png

2.反射解析结构体标签TAG

a829f6964271e000b8411ddf4e363fa.png

0f0ba6aeb5c2e98cd270a7c9abb227c.png

3.go并行

image.png

4.关闭channel

image.png

5.channel有缓冲与无缓冲的同步问题

image.png

image.png

image.png

6.channel

image.png

image.png

可以使用range来迭代不断操作channel

for data :=range c{
    fmt.Println(data) 
}