关于Go语言在操作系统上的调度
type
status
date
slug
summary
tags
category
icon
password
Property
Jan 22, 2026 04:58 AM
最近一直在写Go,对这个语言的体会也是越来越深。
go作为编译类语言,能直接构建对应平台的二进制文件,但是实际上语言本身也是有runtime的。
这点其实和其他语言很不一样,所以这篇文章就来讲讲这个。
首先需要知道,go编译出来的二进制,确实是实打实的纯汇编产物。
中间不会经过任何的指令翻译层,这也意味着不需要模拟任何寄存器的操作。
具体,go是如何在纯指令的汇编中加入rt的:
goroutine是什么具体我就不说了,主要讲讲goroutine是如何调度的。
首先go的rt并不是时时刻刻都在运行的,因为go不是虚拟机语言,没有寄存器模拟这种东西。
系统线程在执行指令的时候rt不可能会插入进来。
rt具体是如何介入指令之中的:
go编译器在编译go代码的时候会在生成的汇编指令中加入一些安全点,也可以叫做桩。
运行到安全点后,goroutine的上下文就会保存,rt就会开始运行,判断此刻是否要让出资源,或者要不要做GC
Loading...