目录:
1.概念
2.linux线程与接口的关系
3.代码验证(线程是进程模拟的)
-------------------------------------------------------------------------------------------------------------------------------
1.概念
一般教材:
线程:是在进程内部运行的一个执行分支(执行流),属于进程的一部分,粒度要比进程更加细和轻量化。
CPU调度进程,拿着你进程PCB,把你PCB当中的上下文,放进CPU当中,恢复进程
如果我假设,我有一个能力把你的代码分上一部分,把你的数据分上一部分,把你乱七八糟的区域分上一小部分,然后我创建一个PCB,,不过我新的PCB不想创建新的进程,新的PCB不想指向新的地址空间,而是指向我们主进程的PCB地址空间同一个
CPU此时看到的PCB <= 之前进的PCB的
CPU只是认为一个PCB就是一个需要被调度的执行流!!!这样的每一个一个一个的PCB 在我们的linux当中称之为线程
linux中没有专门为线程设计 TCB,而是用进程的PCB来模拟线程(不用维护复杂的进程和线程关系,不用单独为所谓的线程设计任何算法,直接使用进程的一套相关方法,OS只需要聚焦在线程间的资源分配上,就可以了)
上面叫做线程是属于进程的一部分呢??
线程的公有和私有资源
所以的轻轻量级(可能是”线程“)都是在进程内部运行(地址空间:用来表示进程所能看到的大部分资源!!!)
进程,独立性(PCB是分开的),可以有部分共享资源(管道、ipc资源)
线程,大部分资源是共享的,可以有部分资源是”私有“的(线程的PCB,栈(线程在执行和运行 的时候产生的临时数据是可以被压栈的,线程和线程之间临时数据不会互相干扰,所以需要有独立的栈结构),上下文(一个线程是调度的基本单位,所以它一定会形成自己在CPU寄存器当中自己的临时数据))
-------------------------------------------------------------------------------------------------------------------------------
2.linux线程与接口的关系
3.代码验证(线程是进程模拟的)