goroutine-基本介绍
进程和线程介绍
程序、进程和线程的关系示意图
并发和并行
1)多线程程序在单核上运行,就是并发
2)多线程程序在多核上运行,就是并行
3)示意图:
小结:
Go 协程和Go 主线程
Go 主线程(有程序员直接称为线程/也可以理解成进程): 一个 Go 线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程[编译器做优化]。
Go 协程的特点
1)有独立的栈空间
2)共享程序堆空间
3)调度由用户控制
4)协程是轻量级的线程
示意图
goroutine-快速入门
案例说明
请编写一个程序,完成如下功能:
1)在主线程(可以理解成进程)中,开启一个 goroutine, 该协程每隔 1 秒输出 "hello,world"
2)在主线程中也每隔一秒输出"hello,golang", 输出 10 次后,退出程序
3)要求主线程和 goroutine 同时执行.
4)画出主线程和协程执行流程图
输出的效果说明, main 这个主线程和 test 协程同时执行.
主线程和协程执行流程图
快速入门小结
1)主线程是一个物理线程,直接作用在 cpu 上的。是重量级的,非常耗费 cpu 资源。
2)协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。
3)Golang 的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显 Golang 在并发上的优势了
goroutine 的调度模型
MPG 模式基本介绍
MPG 模式运行的状态 1
MPG 模式运行的状态 2