前言
本文从操作系统谈起,简单介绍操作系统基本知识,引出进程、线程调度的基本原理和基本模型,然后从0到1设计Golang调度器,通过方案的逐步演进升级,可以了解到GPM模型设计理念。
阅读本文会了解到线程模型、线程调度,并最终理解Golang为什么设计为GPM模型,并通过简要runtime代码分析,验证在GPM模型推演过程中各种问题设想以及解决方案。
写在前面
- 操作系统基本知识主要介绍什么是内核态与用户态?为什么要有内核态和用户态?用户态和内核态区别?从而引申出线程模型,对相关知识熟悉的同学可以跳过本章节。
- 行文中对于协程和线程的概念未做区分,用线程统一定义,因为本质上协程是用户态线程。读者知悉。
操作系统基础知识
维基给操作系统的定义是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。
去掉定语可以简单理解 :操作系统(operation system,简称OS)是系统软件程序。
进一步可以理解:操作系统也是一种程序、代码,其介于计算机硬件,和上层软件之间的一种软件。
其核心职能无非五个方面:进程、存储、设备、文件、作业管理。
什么是用户态和内核态?
大前提:软件程序运行需要资源(存储)
小前提:操作系统是软件
结论: 操作系统运行需要资源
介于上述三段式结论,
- 操