Golang系列 - gorountine栈管理

在学习go的过程中发现 gorountine的栈管理方式 和 传统的c/c++语言有所不同。所以本文通过整理网上资料进行学习总结。

 

栈的作用

 

首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。

 

:本文中所说的栈 不是专指数据结构中的栈,而是在不同场景下利用栈这种数据结构所实现的应用。例如:进程栈,线程栈,协程栈,硬件栈,内核栈,中断栈等等。栈的大小不是实时固定的,是根据程序的运行动态变化的,但都有一个最大值,本文讨论的栈大小都是指栈的最大值。

 

栈作用可以从两个方面体现:函数调用 和 多任务支持 。

 

函数调用:

不同和语言会有不同的函数调用约定,但无论是那个一种的传参格式和栈帧清理约定,都用到栈这种数据结构。因为在函数调用过程中肯定是 调用者先开辟栈帧空间被调用者后开辟栈帧空间,被调用者肯定先于调用者执行完,所以是被调用者先回退栈帧孔空间,再回退调用者的栈帧空间。这个过程刚好是个一个 后入先出 的过程,而栈刚好满足这个特性。

函数栈帧:函数调用经常是嵌套的,在同一时刻,栈中会有多个函数的信息。每个未完成运行的函数占用一个独立的连续区域,称作栈帧(Stack Frame)。栈帧存放着函数参数,局部变量及恢复前一栈帧所需要的数据等。

 

多任务支持:

这个很好理解,栈中可以保存一个执行单元的上下文环境。多任务切换的时候只要把当前执行单元的环境保存在自己的栈中,当再次执行的时候从任务单元的栈中恢复这个环境就可以了。这个特性是栈可以支持的,但不一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值