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:(用户级线程和内核级线程之间的中间层)
标签:操作系统,--,调度,特点,线程,内核,进程,CPU From: https://www.cnblogs.com/workformyselfandworld/p/17667034.html