原创 爱写程序的阿波张 源码游记 2019-05-12
本文是《Go语言调度器源代码情景分析》系列的第15篇,也是第二章的第5小节。
上一节我们说过main goroutine退出时会直接执行exit系统调用退出整个进程,而非main goroutine退出时则会进入goexit函数完成最后的清理工作,本小节我们首先就来验证一下非main goroutine执行完成后是否真的会去执行goexit,然后再对非main goroutine的退出流程做个梳理。这一节我们需要重点理解以下内容:
原创 爱写程序的阿波张 源码游记 2019-05-12
本文是《Go语言调度器源代码情景分析》系列的第15篇,也是第二章的第5小节。
上一节我们说过main goroutine退出时会直接执行exit系统调用退出整个进程,而非main goroutine退出时则会进入goexit函数完成最后的清理工作,本小节我们首先就来验证一下非main goroutine执行完成后是否真的会去执行goexit,然后再对非main goroutine的退出流程做个梳理。这一节我们需要重点理解以下内容:
原创 爱写程序的阿波张 源码游记 2019-05-09
本文是《Go语言调度器源代码情景分析》系列的第14篇,也是第二章的第4小节
上一节我们通过分析main goroutine的创建详细讨论了goroutine的创建及初始化流程,这一节我们接着来分析调度器如何把main goroutine调度到CPU上去运行。本节需要重点关注的问题有:
原创 爱写程序的阿波张 源码游记
本文是《Go语言调度器源代码情景分析》系列的第13篇,也是第二章的第3小节。
上一节我们分析了调度器的初始化,这一节我们来看程序中的第一个goroutine是如何创建的。
原创 爱写程序的阿波张 源码游记 2019-05-05
本章将以下面这个简单的Hello World程序为例,通过跟踪其从启动到退出这一完整的运行流程来分析Go语言调度器的初始化、goroutine的创建与退出、工作线程的调度循环以及goroutine的切换等重要内容。
原创 爱写程序的阿波张 源码游记 2019-05-01
本文是《go调度器源代码情景分析》系列的第11篇,也是第二章的第1小节。
goroutine简介
goroutine是Go语言实现的用户态线程,主要用来解决操作系统线程太“重”的问题,所谓的太重,主要表现在以下两个方面:
原创 爱写程序的阿波张 源码游记 2019-04-27
本文是《go调度器源代码情景分析》系列 第一章 预备知识的第十小节,也是预备知识的最后一小节。
线程本地存储又叫线程局部存储,其英文为Thread Local Storage,简称TLS,看似一个很高大上的东西,其实就是线程私有的全局变量而已。
我们将在最后一章讨论有关系统调用方面的抢占调度,所以这里有必要对系统调用有个基本的了解。
系统调用是指使用类似函数调用的方式调用操作系统提供的API。
原创 爱写程序的阿波张 源码游记 2019-04-22
前面几节我们介绍了CPU寄存器、内存、汇编指令以及栈等基础知识,为了达到融会贯通加深理解的目的,这一节我们来综合运用一下所学知识,看看函数的执行和调用过程。