在一般的用户线程上下文切换实现(like setjmp/longjmpand the function returnway)中,我们保存和恢复被调用者保存的寄存器,但golang只保存和恢复%rsp,%rip并且%rbp在gobuf中。
setjmp/longjmp
function return
%rsp
%rip
%rbp
以 x86_64 为例,golang 用 runtime.gosave 保存 goroutine 上下文,用runtime.gogo恢复goroutine 上下文。
那么为什么golang会这样呢?
小怪兽爱吃肉
相关分类