进程/线程/协程
单进程->多进程
在早期的单进程操作系统中,计算机只能一个任务一个任务的进行处理,任务完成之后才可以进行下一个任务处理
这就出现了一个情况:
当进程阻塞时,计算机的cpu资源就暂停浪费掉了...多线程->多协程
由上我们知道,线程是cpu执行的最小单位,也就是说,线程的切换,执行的调度器依然是操作系统在调度的,我们称之为 内核态
在多线程编程中,会有各种并发问题,例如线程锁,同步竞争,竞争冲突等问题...关系
进程与线程之间为1:N关系
线程与协程之间为1:N关系
操作系统的最小调度单位为线程
线程可以运行协程
在GMP中,线程与协程之间的关系为M:N,协程A可能会在线程1执行,也可能下一次在线程2执行...P队列的数量,在程序启动的时候就创建,最多有GOMAXPROCS 个(默认为cpu线程数)
M运行线程,线程会去绑定一个P去执行G的任务,当P为空时,M会尝试从全局队列(获取其他P队列)拿到G放到P队列执行...关于GMP数量的问题
G
协程数量在理论上是无限的,每个协程需要占用大概4kb的内存,只要内存足够可以一直创建,只要使用go关键字即可创建
M
M在有空闲P需要执行时就会创建,每个P都得绑定一个M,如果一个