线程基本概念:
LWP : light weight process 轻量级进程,本质仍是线程(在linux环境下,因为本身linux进程管理就很完善了,与windows环境下,两者线程原理完全不一样)
进程: 独立地址空间,拥有PCB
线程:也有PCB,但没有独立的地址空间(共享)
区别:在于是否共享地址空间。
Linux下: 线程:最小的执行单位。
进程: 最小分配资源单位,可以看成只有一个线程的进程。
如图所示简单的PCB构成:
Linux内核线程实现原理:
1. LWP创建原理跟进程低层实现是一样的,pthread_creat 跟fork 低层都是用clone创建,但是各自拥有各自的PCB。
2. 从内核看进程跟线程是一样的,虽然PCB不同,但是PCB指向的内存资源的三级页表是相同的。
3. 进程可以蜕变成线程。
4. 线程可以看做是寄存器和栈的集合
5.为什么说多线程效率高呢,如下图,当一个进程,从一个进程被分成五个线程之后,CPU轮转调度的时候,加上右边 两个单线程进程,一共七个调度单位,那么CPU调度第一个进程的概率会大大增加,则此时第一个进程获取CPU的时间也会增加,从而提高了它的执行效率。
三级映射:
三级映射又叫三级页表。
示意图如下:
a.out的线程的PCB都指向同一块页目录。