外观
多线程,CPU调度
进程
寄存器
CPU不知道线程进程的概念,他只知道
- 取出指令
- 执行指令 再回到初始状态等待指令继续执行。
可是CPU又在哪里取指令呢? 寄存器!程序计数器,类似内存但是比内存读写速度更快,存放的是需要执行的指令在内存中的地址,就是CPU下一个要执行的指令的地址
是谁来设置寄存器的指令地址呢? 首先要明白指令来自内存,内存的指令来自于磁盘存储的可执行程序生成而来,磁盘的可执行程序是程序编译而来就是我们写的程序函数! 函数编译形成cpu的指令,
如何让cpu知道第一个执行的指令? 第一个指令就是函数入口,咱门写的程序内的Main函数!把入口函数编译为指令存入寄存器内,CPU就可以顺着指令完整的执行一个程序,只要我们能坐到把指令装入寄存器,就算没有操作系统也可以执行程序了!
- 开辟一个放得下执行指令的内存空间
- 找到函数入口,让CPU可以取到寄存器内存的指令地址,开始执行程序 机器指令需要加载到内存中执行,因此只需要记录下内存的起始与结束地址,并找到入口指令的地址用一个结构存储下来 就叫进程(Process)
进程无非就是内存中的一段区域,这段区域中保存了CPU执行的机器指令以及函数运行时的堆栈信息,要想让进程运行,就把main函数的第一条机器指令地址写入PC寄存器,这样进程就运行起来了。
线程
进程的缺点就是只有一个函数入口,因此只能被一个CPU执行,但是我们想让他更快,多个CPU同时执行一个程序,既然寄存器能指向main函数,就也可以指向非main函数! 当把寄存器指向非main函数,这就是线程
多线程问题
线程也是访问的进程内存中的程序,当程序运行的时候编译的指令写入内存中,进程指向main函数,开辟线程指向其他函数,多线程是访问的同一个内存地址空间,而CPU没有线程的概念,就会存在互斥,只有程序员自己解决互斥与同步的问题!
线程池
就是创建一批线程,不销毁让他们等在哪里,有事情了就给他们做
