原创 爱写程序的阿波张 源码游记 2019-06-11
深入理解 defer 分上下两篇文章,本文为上篇,主要介绍如下内容:
为什么需要 defer;
defer 语法及语义;
defer 使用要点;
defer 语句中的函数到底是在 return 语句之后被调用还是 return 语句之前被调用。
原创 爱写程序的阿波张 源码游记 2019-06-11
深入理解 defer 分上下两篇文章,本文为上篇,主要介绍如下内容:
为什么需要 defer;
defer 语法及语义;
defer 使用要点;
defer 语句中的函数到底是在 return 语句之后被调用还是 return 语句之前被调用。
原创 爱写程序的阿波张 源码游记 2019-06-01
本文是《Go语言调度器源代码情景分析》系列的第22篇,也是第六章《抢占调度》的第2小节。
上一节我们分析了因运行时间过长而导致的抢占调度,这一节我们来分析因进入系统调用时间过长而发生的抢占调度。
原创 爱写程序的阿波张 源码游记 2019-05-28
本文是《Go语言调度器源代码情景分析》系列的第21篇,也是第六章《抢占调度》的第1小节。
前面几节我们分析了Goroutine因读写channel等阻塞而导致的被动调度以及通过调用Gosched函数发起的主动调度,现在还剩下最后一种调度方式即抢占调度未讨论,从本节开始,我们就来对它进行分析。
原创 爱写程序的阿波张 源码游记 2019-05-24
本文是《Go语言调度器源代码情景分析》系列的第20篇,也是第五章《主动调度》的第1小节。
Goroutine的主动调度是指当前正在运行的goroutine通过直接调用runtime.Gosched()函数暂时放弃运行而发生的调度。
原创 爱写程序的阿波张 源码游记 2019-05-22
本文是《Go语言调度器源代码情景分析》系列的第18篇,也是第四章《Goroutine被动调度》的第1小节。
前一章我们详细分析了调度器的调度策略,即调度器如何选取下一个进入运行的goroutine,但我们还不清楚什么时候以及什么情况下会发生调度,从这一章开始我们就来讨论这个问题。
原创 爱写程序的阿波张 源码游记 2019-05-17
本文是《Go语言调度器源代码情景分析》系列的第17篇,也是第三章《Goroutine调度策略》的第2小节。
上一小节我们分析了从全局运行队列与工作线程的本地运行队列获取goroutine的过程,这一小节我们继续分析因无法从上述两个队列中拿到需要运行的goroutine而导致的从其它工作线程的本地运行队列中盗取goroutine的过程。
原创 爱写程序的阿波张 源码游记 2019-05-14
本文是《Go语言调度器源代码情景分析》系列的第16篇,也是第三章《Goroutine调度策略》的第1小节。
在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代码按照一定的算法在适当的时候挑选出合适的goroutine并放到CPU上去运行的过程。这句话揭示了调度系统需要解决的三大核心问题: