go-协程
我们经常听到协程、线程、进程,到底是杂么一回事呢
先从范围来了解一下,进程包括线程,线程包括协程
1.进程是程序,程序在操作系统中一次执行过程,是系统进行资源分配和调度的基本单位。
2.线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小能独立运行的基本单位。
3.一个进程可以创建销毁多个线程,同一个进程中的多个线程可以并发执行
并发和并行
1.多线程程序在单核上运行,就是并发
2.多线程程序在多核上运行,就是并行
go协程的特点:
1.有独立的栈空间
2.共享程序堆空间
3.调度由用户执行
4.协程是轻量级的线程
协程优势:
1.主线程是一个物理线程,直接作用在cpu上,是重量级的,非常消耗cpu资源
2.协程是从主线程开启的没事轻量级的线程,是逻辑态,对资源消耗相对小
3.golang的协程机制,可以开启上万个协程。
看一个协程的例子
var (
myMap = make(map[int]int, 10)
)
func test(n int) {
res := 1
for i := 1; i <= n; i++ {
res *= i
}
//这里我们将 res 放入到 myMap
myMap[n] = res //concurrent map writes?
}
func main() {
// 我们这里开启多个协程完成这个任务[200 个]
for i := 1; i <= 200; i++ {
go test(i)
}
//休眠 10 秒钟【第二个问题 】
time.Sleep(time.Second * 10)
//这里我们输出结果,变量这个结果
for i, v := range myMap {
fmt.Printf("map[%d]=%d\n", i, v)
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接