分类目录:Golang

Golang GC探究(转)

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

Go语言死锁检测工具

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

Implemention of Golang: 协程栈(一)

协程栈概述 说明 计算机中的栈一个很大的应用场合使用在函数调用中。我们这里简单说说golang的协程栈布局,学过计算机的应该都不会陌生。 程序事例 package main func f(a, b int) int { sum := 0 sum = a + b for i := 0; i < 1000; i++ { println("sum is:", sum) } return sum } func main() { f(1, 2) }

golang调度时机研究

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

golang 协程调度算法深究

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

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

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