Go的runtime到底是怎么工作的?

目前很少有介绍runtime内部实现的文章,那么runtime包到底包含了那些模块?从开发者的角度来看的话,runtime都提供了那些功能?官方网站好像也没有文档介绍,在go-nuts的邮件群组也没看到,谁能够总结一下Go的runtime的总结架构。
已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: gongxun leoliu stevewang itfanr niugou banbo更多 »

从一个高级别来看,Go的runtime实现了Go语言里面的所有的基础设施:goroutine,内存分配,垃圾回收,channels,interfaces, maps,slices. 同时runtime还是实现了一些暴露的接口功能,例如runtime.NumCPU().

如果从架构角度来看,runtime里面最主要的是两个功能:内存分配/GC,和goroutine调度。

- GC在过去的几个版本里面改进非常大,而我在不久的将来我预计将会变得越来越好,目前的GC依赖compiler,compiler在内存中存储每个pointer的时候写了一个write barrier。目前的GC是一个并行的收集实现,更多的内容可以参考 Rick Hudson 最近的一个演讲 https://talks.golang.org/2015/go-gc.pdf

- goroutine的调度器是在线程之上的多路复用。channel的实现是仅仅的关联在调度器之上,compiler也是紧密的和goroutine调度器关联在一起,不仅仅创建goroutine,而且也管理着stack,防止stack溢出。goroutine是一个执行的stack+一个控制的struct。调度器分配goroutine在线程上执行,当一个线程阻塞了或者调用一个非Go的函数(CGO调用),那么调度器就会开始一个新的线程来运行其他的goroutine.

su21

赞同来自: stevewang

雨痕有本电子书讲的很好, https://github.com/qyuhen/book

要回复问题请先登录注册