go语言调度器源代码情景分析1

原创 张方波 源码游记 2019-04-16
专栏简介

本专栏以精心设计的情景为线索,结合go语言最新1.12版源代码深入细致的分析了goroutine调度器实现原理。

适宜读者

go语言开发人员
对线程调度器工作原理感兴趣的工程师
对计算机底层运行原理感兴趣的工程师

专栏目标

笔者希望即使是从未接触过计算机底层原理的读者,通过对本专栏的认真学习,都可以完全掌握go语言调度器的实现原理及细节,从而可以充分利用go调度器的特性写出更加优秀的并发程序和解决一些与调度相关的疑难杂症;另外,读者还可以学到大量与程序运行相关的基础知识,比如汇编代码,CPU如何执行指令以及并发无锁编程等等非常重要的编程内功心法,有了这些基础理论,在今后的学习和工作中,读者就完全有能力对其它一些自己感兴趣的底层实现原理做深入的分析。

如何学习本专栏

编程是一门实践性很强的技术,所以建议读者在阅读本专栏时多注重实践练习,特别是在学习第一部分的汇编指令及函数调用栈等知识的时候,读者可以自己写一些小程序然后用调试工具单步执行来跟踪寄存器以及栈的变化,从而更好的理解这些内容。

专栏模块

本专栏主要分为两大部分:

第一部分包括第一章,主要介绍理解调度器工作原理所必须的预备知识,比如汇编指令,函数调用过程,操作系统线程调度原理以及线程本地存储等重要理论知识。这部分内容主要是为从未接触过底层知识的读者准备的,如果读者对这部分已经很熟了,则完全可以跳过这部分的阅读。

第二部分包括第2到第6章,主要分析goroutine调度器的实现,包括调度器的初始化,调度策略以及主动被动和抢占调度等,在分析过程中我们不仅会介绍调度器在干什么,更重要的是我们还会详细说明为什么要这么做,让读者知其然也知其所以然。

专栏章节

第一章 预备知识

  1. CPU寄存器与内存介绍
  2. 函数调用栈
  3. 汇编指令
  4. 函数调用过程
  5. 操作系统线程及调度
  6. 线程本地存储

第二章 初始化和调度循环

  1. 调度器概述
  2. 程序启动和调度器初始化
  3. 创建main goroutine
  4. 启动main goroutine

第三章 调度策略

  1. goroutine的退出与调度循环
  2. 再探schedule函数与寻找可运行的goroutine
  3. 盗取goroutine与工作线程睡眠

第四章 被动调度

  1. goroutine进入运行队列
  2. goroutine进入睡眠
  3. 唤醒睡眠中的goroutine与工作线程
  4. 创建工作线程

第五章 主动调度

  1. 主动调度

第六章 抢占调度

  1. 抢占运行时间过长的goroutine
  2. goroutine进入系统调用以及从系统调用返回
  3. 抢占进入系统调用的goroutine

作者介绍

张方波,15年软件开发经验,对计算机底层运行原理很感兴趣,做过应用层软件,也玩过操作系统内核,某公司前高级技术专家,现专注于K12在线教育,偶尔写写技术文章。

最后,如果您有任何建议或疑问,可以扫描下方微信二维码添加好友,我们一起进步!

-------------本文结束 感谢阅读-------------