GO 语言之 Goroutine 原理解析

本文深入探讨了 Go 语言中的 Goroutine 原理,包括并发模式、Go 的 CSP 并发模型以及 Goroutine 与系统内核线程之间的调度器 GMP。Goroutine 作为轻量级线程,通过 channel 进行通信,实现高效并发。Go 调度器管理 Goroutine 与 Machine 的关系,通过 GOMAXPROCS 控制并发任务数量。
摘要由CSDN通过智能技术生成

并发 一个 CPU 上能同时执行多项任务,在很短时间内,CPU 来回切换任务执行(在某段很短时间内执行 程序 a,然后又迅速得切换到程序 b 去执行),有时间上的重叠(宏观上是同时的,微观仍是顺序执行),这样看起来多个任务像是同时执行,这就是并发。

并行 当系统有多个 CPU 时,每个 CPU 同一时刻都运行任务,互不抢占自己所在的 CPU 资源,同时进行, 称为并行。

进程 CPU 在切换程序的时候,如果不保存上一个程序的状态(context --上下文),直接切换下一个程 序,就会丢失上一个程序的一系列状态,于是引入了进程这个概念,用以划分好程序运行时所需 要的资源。因此进程就是一个程序运行时候的所需要的基本资源单位(也可以说是程序运行的一 个实体)。

线程 CPU 切换多个进程的时候,会花费不少的时间,因为切换进程需要切换到内核态,而每次调度需 要内核态都需要读取用户态的数据,进程一旦多起来,CPU 调度会消耗一大堆资源,因此引入了 线程的概念,线程本身几乎不占有资源,他们共享进程里的资源,内核调度起来不会那么像进程 切换那么耗费资源。协程 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在 切回来的时候,恢复先前保存的寄存器上下文和栈。因此,协程能保留上一次调用时的状态(即 所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说 法:进入上一次离开时所处逻辑流的位置。线程和进

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值