线程模型

1、背景

目前对内核不熟悉的阶段,所有的知识有零碎的来自网络。但是网络上各有各见解,有片面,有大牛,有过时,有现在的。我作为一个小白,只能做到兼听则明。如果我的博客中有什么问题,请大家指出,共同进步。

1.1 参考资料

https://www.cnblogs.com/Mered1th/p/10745137.html

https://www.zhihu.com/question/35128513

https://www.cnblogs.com/jingzhishen/p/4433023.html

2、用户线程和内核线程

线程按其调度者(如果内核知悉这个线程,即由内核调度这个线程;否则就是进程来调度它,线程竞争进程的运行时间)可分为用户级线程和内核级线程两种。

用户线程:有关线程的管理的所有工作都由应用程序来完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成多线程程序。

1>用户级线程仅存在于用户空间

2>内核并不能看见用户线程

3>内核资源的分配仍然是安装进程进行分配的;各个用户线程只能在进程内进行资源竞争。

内核线程:线程管理的所有工作都由内核完成,应用程序没有进行线程管理的代码,仅有一个到内核级线程的编程接口。内核为进程及内部的每个线程维护上下文信息,调度也在内核基于线程架构的基础上完成。

1>线程的创建、撤销和切换等都需要内核直接实现,即内核了解每个作为可调度实体的线程;

2>这些线程可在全系统内进行调度资源的竞争;

3>内核空间内为每一个内核支持线程设置了一个线程控制块(TCB),内核根据该控制块,感知线程的存在,并进行控制。

在一定程度上类似于进程,只是创建、调度的开销比进程小。

 (a) N:1用户线程模型----多对一模型

用户线程由进程来管理,OS内核完全不知道线程信息。每个线程在同一进程竞争“被调度的CPU时间”。

由于内核不干涉线程的任何生命活动,也不干涉同一进程下的线程环境切换,因此多个线程只能调度到一个CPU,约束了并发总量

若一个线程阻塞,进程的所有线程都会阻塞

(b)1:1核心线程模型(PThread线程库---NPTL(Native POSIX Thread Libary))

应用程序创建的每一个线程都由一个内核线程直接管理,OS内核将每一个内核线程都调度到系统CPU上,

所有线程直接和"系统范围"内的其他线程竞争。

优点:当一个线程被阻塞时,允许另一个线程继续运行,并发能力强

缺点:每创建一个用户线程都需要创建一个内核级线程与之对应,这样创建线程开销比a要大,会影响到应用程序的性能

(3)N:M模型

N:M混合模型提供了两级控制,将用户线程映射为系统的可调度体以实现并行,这个可调度体称为轻量级进程(LWP:light weight process)。LWP再一一映射到内核线程。OS 内核将每个核心线程都调到系统CPU上,因此所有线程都在“系统竞争范围”工作。

a、b的折中

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值