进程、线程与协程
进程与线程
- 在大多数情况下,线程是进程的组成部分,一个进程可以存在多个线程,这些线程并发执行共享进程的内存资源
- 进程之间是相互独立的,不同进程具有不同的内存地址空间、代表程序运行的机器码、进程状态、操作系统资源描述符等
- 操作系统调度到CPU中执行的最小单位是线程
线程与协程
- 协程被认为是轻量级的线程。
- 和线程不同的是,操作系统内核感知不到协程的存在,协程的管理依赖于Go语言运行时自身提供的调度器
- 调度方式来看
- 协程是用户态
- 协程的管理依赖于Go语言运行时的调度器
- Go语言中的协程是从属于某一个线程的
- 协程与线程的对应关系是:M:N
- 上下文的切换速度
- 协程的切换速度要快于线程
- 原因是协程切换不需要经过操作系统用户态与内核态的切换,只需要保存极少的状态和寄存器变量值
- 调度策略
- 线程的调度在大部分时间是抢占式的,操作系统调度器为了均衡每个线程的执行周期,会定时发出中断信号强制执行线程上下文切换
- 协程在一般情况下是协作式调度的,当一个协程处理完自己的任务之后,可以主动将执行权利让渡给其它协程
- 说明协程不会被轻易的强占
- 栈的大小
- 协程栈默认是2KB
- 线程的默认是2MB
- Go语言中的协程栈在Go运行时的帮助下会动态检测栈的大小,并且动态扩容
进程、线程与协程
http://example.com/2023/04/25/进程、线程与协程/