Golang

事先声明:本文转载自http://www.open-open.com/lib/view/open1435846881544.html 在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究。本文对研究的结果进行一下总结。

Continue reading Golang GC探究(转)

Go语言死锁检查工具,可以输出复杂的死锁链条信息,谁等在哪里等待,谁在哪里锁的,具体到行号,在不开启死锁检查时不会影响程序性能,可直接替代原生sync包。 这个包用来在开发调试期,帮助排查程序中的死锁情况。

Continue reading Go语言死锁检测工具

channel读写 对channel的读、写都可能会引起协程调度,这很自然,因为现在golang的channel操作均是同步操作。 向channel写数据 golang的channel分为无缓冲和有缓冲,前者主要用于同步,而后者主要用于消息传递。他们形式上的区别在于创建缓冲区时指定的缓冲区大小这个参数。 无论是无缓冲还是有缓冲channel,当向channel写数据发现被阻塞时,都需要将当前写的协程挂起,并进行一次调度。接下来让我们仔细分析下与channel中与调度相关的逻辑。

Continue reading golang调度时机研究

说明 前面有两篇文章我们聊了聊golang的协程调度算法。现在重新捡起来看看,真的是太皮毛了,羞愧,浅尝辄止的研究从来不是我的风格。 痛定思痛,从这里开始,我们深入深入再深入,直到将她扒光为止。 这篇文章可能会包含较多的个人思考,所以可能会有不少呓语,请忽略,如果你也能跟上我的节奏,那么你可能会很喜欢,否则,你可能觉得我是个神经病。

Continue reading golang 协程调度算法深究

Goroutine状态变迁 在讲解操作系统进程调度的部分时,几乎所有的书籍都会先列出一张进程的状态迁移图,通过状态图,能很清晰的把进程调度的每个环节串联起来,方便理解。 Go运行时的调度器其实可以看成OS调度器的某种简化版 本,一个goroutine在其生命周期之中,同样包含了各种状态的变换。弄清了这些状态及状态间切换的原理,对搞清整个Go调度器会非常有帮助。 以下是我总结的一张goroutine的状态迁移图,圆形框表示状态,箭头及文字信息表示切换的方向和条件:

Continue reading Golang协程调度算法分析(一)