线程篇--线程的特点

发布时间 2023-08-30 13:58:22作者: 好像流沙
1. 线程是轻量级进程(light-weight process),也有PCB,创建线程使⽤的底层函数和进程⼀样,都是clone;
2. 从内核⾥看进程和线程是⼀样的,都有各⾃不同的PCB;
3. 进程可以蜕变成线程;
4. 在linux下,线程最是⼩的执⾏单位进程是最⼩的分配资源单位
实际上,⽆论是创建进程的fork,还是创建线程的pthread_create,底层实现都是调⽤同⼀个内核函数 clone
1. 如果复制对⽅的地址空间,那么就产出⼀个“进程”;
2. 如果共享对⽅的地址空间,就产⽣⼀个“线程”
Linux内核是不区分进程和线程的, 只在⽤户层⾯上进⾏区分。所以,线程所有操作函数 pthread_* 是库函数,⽽⾮
系统调⽤。
三种线程的实现
(1)⽤户线程
⽤户空间实现的线程,由基于⽤户态的线程库管理
优点:
1. 管理不需要内核直接参与,因此可⽤于不⽀持线程技术的操作系统;
2. ⽤户线程切换由线程库调度,不需要⽤户态与内核态之间转换。
缺点:
1. 由于不由操作系统调度,⼀旦⽤户线程发起系统调⽤⽽阻塞,那么此进程下⽤户线程都⽆法运⾏;
2. ⼀旦某个⽤户线程正在运⾏,只有当其交出CPU执⾏权,其他⽤户线程才可以运⾏,⽆法被打断,因为只有操作
系统才有权限打断运⾏,但是操作系统不直接参与调度;
3. ⽤户线程操作系统⽆法感知,CPU资源是直接分配给线程所在的进程,因此分到具体⽤户线程的时间⽚就较短
了。,其TCB线程控制块⽆法被操作系统所感知,因此⽤户线程的创建、终⽌、同步、调度等都不是由操作系统
直接参与。
(2)内核线程:
由操作系统管理、调度,其TCB是存放在内核中。⼀般由操作系统事先创建内核线程集(类似于线程池),数量有
限。
优点:
1. 当⼀个内核线程发起系统调⽤阻塞时不会影响其它内核线程的执⾏;
2. 操作系统将CPU资源直接分配给内核线程,更多CPU时间。
缺点:
1. 需要由内核来维护内核线程的上下⽂信息及运⾏状态等,占⽤内核资源;
2. 内核线程创建、终⽌、切换都是在内核中进⾏,开销⽐较⼤。
(3)轻量级线程 LWP:内核⽀持的⽤户线程,像普通进程⼀样被调度,其类似于进程中的执⾏线程。
每个LWP都需要⼀个内核线程的⽀持(CPU资源分配、调度),实际上⽤户线程是运⾏在LWP上的。
LWP:(用户级线程和内核级线程之间的中间层)