为什么要剖析Linux源码
- 热爱。就是想要知道自己心心念念的Linux到底是如何实现的。
- 职业发展需要。深耕后端,就不得不和Linux打交道,所有服务器都是运行在Linux上的,去深入了解Linux才能有更好的发展。
- 工作需要。虽然只是写业务代码,但是服务器部署在Linux上,无论是编写代码还是定位服务器问题,都需要对Linux有足够的了解。
源码剖析的几个手段
紧紧抓住3个问题:是什么?为什么?如何会更好?
- 源码剖析是基于对其有一定的了解。a.有使用经验,了解其解决了什么问题。b.有理论基础,要大致知道其是如何设计的。因此在源码剖析过程中,要紧紧抓住是什么这个问题,实现了什么,怎么实现的,实现的细节又是什么。
- 带着疑问去剖析源码。使用时,对是如何实现的疑问。源码剖析时,考虑各种异常情况,对为什么要这么实现提出疑问。带着疑问去学习,有的放矢效果更佳。
- 源码剖析的过程是和作者交流的过程,在了解是怎么实现,解决了什么问题后,要提出自己的想法。作者为问题提出了一种解决方案,那站在作者的基础上自然应该尝试去提出更优的方案。
Linux调度概要
- Linux调度涉及哪些方面?Linux调度对象是线程,线程运行所需要的资源由进程提供。进程涉及的资源主要有内存,文件描述符,以及子进程,信号等。
- Linux调度会有哪些场景?这个问题等于线程有哪些状态。主要有,正在运行,等待运行,等IO操作,睡眠,处理信号,处理中断。以上这些状态都是调度需要考虑的问题。
- 基于上面的思考,Linux调度应该是怎么样的?
a.提供创建进程的接口fork。
b.可以运行等待运行的线程。
c.正在运行的线程可以主动让出或者被动让出。
d.可以支持睡眠并且在睡眠到期后继续运行。
e.支持IO的读写,具体未知,但可以预估的是不会在IO中浪费过多时间。
f.可以处理信号,并且可以处理连续多个信号的情况。
g.可以处理中断,并且可以处理多个线程同时被中断的情况。
总结
在看源码前,知道它大概是什么样的,同时带着使用时遇到的问题,在解决问题的过程中进一步发现问题解决问题。要有自己的预期,带着预期和思考去剖析源码。