51网站怎么打不开了,山东省住房建设部网站,建一个类似亨物说网站建设费用,ui设计学费多少 要学多久目录
1.线程与进程的关系
2.线程的属性
3.线程的实现方式
用户级线程
内核级线程
多线程模型
一对一模型:
多对一模型#xff1a;
多对多模型#xff1a;
4.线程的状态和转换
5.线程的组织与控制 1.线程与进程的关系
可以把线程理解为“轻量级进程”。线程是一个…目录
1.线程与进程的关系
2.线程的属性
3.线程的实现方式
用户级线程
内核级线程
多线程模型
一对一模型:
多对一模型
多对多模型
4.线程的状态和转换
5.线程的组织与控制 1.线程与进程的关系
可以把线程理解为“轻量级进程”。线程是一个基本的CPU执行单元也是程序执行流的最小单位。引入线程之后不仅是进程之间可以并发进程内的各线程之间也可以并发从而进一步提升了系统的并发度使得一个进程内也可以并发处理各种任务 (如QQ视频、文字聊天、传文件) 引入线程后进程只作为除CPU之外的系统资源的分配单元 (如打印机、内存地址空间等都是分配给进程的)。
现在来总结一下引入线程机制后发生了哪些变化 1.传统进程机制中进程是资源分配、调度的基本单位。引入线程后进程是资源分配的基本单位线程是调度的基本单位 2.传统进程机制中只能进程间并发。引入线程后各线程间也能并发提升了并发度 3.传统的进程间并发需要切换进程的运行环境系统开销很大。线程间并发如果是同一进程内的线程切换则不需要切换进程环境系统开销小引入线程后并发所带来的系统开销减小 2.线程的属性 1线程是处理机调度的单位 2多CPU计算机中各个线程可占用不同的CPU 3每个线程都有一个线程ID、线程控制块 (TCB) 4线程也有就绪、阻塞、运行三种基本状态 5线程几乎不拥有系统资源 6同一进程的不同线程间共享进程的资源 7由于共享内存地址空间同一进程中的线程间通信甚至无需系统干预 8同一进程中的线程切换不会引起进程切换 9不同进程中的线程切换会引起进程切换 10切换同进程内的线程系统开销很小 11切换进程系统开销较大 3.线程的实现方式
用户级线程
早期的操作系统 (如: 早期Unix只支持进程不支持线程。当时的“线程”是由线程库实现的 从代码角度看线程其实就是一段代码逻辑。上述三段代码逻辑上可以看作三个线程下述while循环就可以看作一个线程库线程库完成了对线程的管理调度工作。 很多编程语言提供了强大的线程库可以实现线程的创建、销毁、调度等功能。那么线程的管理工作由谁完成呢从上面的例子可以看出线程的管理是由应用程序完成的不需要操作系统的介入。线程的切换工作也不需要CPU参与直接在用户态下就能完成线程的切换工作。
注操作系统是不知道用户级线程的存在的他只知道这是一个进程而进程才被分为多个线程。
所以这样的线程被称为用户级线程只有用户才知道线程的存在操作系统是不知道的。
用户级线程的优点和缺点 优点:用户级线程的切换在用户空间即可完成不需要切换到核心态线程管理的系统开销小效率高 缺点:当一个用户级线程被阻塞后整个进程都会被阻塞并发度不高。多个线程不可在多核处理机上并行运行 我们之前提到过在引入线程后线程是CPU调度的基本单位但是在用户级线程中CPU调度的基本单位还是进程 内核级线程
内核级线程(Kernel-LevelThread,KLT又称“内核支持的线程”)是操作系统支持的线程即操作系统视角也可以看得到的线程 那么这种实现方式线程的管理工作由谁来完成呢由于此线程是在操作系统层面实现的线程所以管理工作由操作系统完成。并且线程的切换需要从用户态转变为内核态。
内核级线程的优点和缺点 优点:当一个线程被阻塞后别的线程还可以继续执行并发能力强。多线程可在多核处理机上并行执行。 缺点:一个用户进程会占用多个内核级线程线程切换由操作系统内核完成需要切换到核心态因此线程管理的成本高开销大。 多线程模型
如何将两种方式结合起来只要在支持内核级线程的系统中再引入线程库就可以实现将若干个用户级线程映射到某一个内核级线程
一对一模型:
一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。 优点当一个线程被阻塞后别的线程还可以继续执行并发能力强。多线程可在多核处理机上并行执行。 缺点一个用户进程会占用多个内核级线程线程切换由操作系统内核完成需要切换到核心态因此线程管理的成本高开销大。 多对一模型
多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。 优点:用户级线程的切换在用户空间即可完成不需要切换到核心态线程管理的系统开销小效率高缺点:当一个用户级线程被阻塞后整个进程都会被阻塞并发度不高。多个线程不可在多核处理机上并行运行,因为只有内核级线程才是处理机的分配单位如果一个进程只对应一个内核级线程的话在同一时间内这个进程只能被分配一个CPU的核心若一个进程对应多个内核级线程那么在多核CPU的环境下这些内核级线程肯定是可以并行执行的。 多对多模型
n用户及线程映射到m个内核级线程(n m)。每个用户进程对应m个内核级线程。克服了多对一模型并发度不高的缺点 (一个阻塞全体阻塞)又克服了一对一模型中一个用户进程占用太多内核级线程开销太大的缺点。 总结一下 用户级线程是代码逻辑的载体而内核级线程是运行机会的载体内核级线程才是处理机分配的单位。例如:多核CPU环境下上面这个进程最多能被分配两个核。一段“代码逻辑”只有获得了“运行机会”才能被CPU执行。 内核级线程中可以运行任意一个有映射关系的用户级线程代码只有两个内核级线程中正在运行的代码逻辑都阻塞时这个进程才会阻塞。 4.线程的状态和转换
线程的状态我们只关注最基本的状态就绪运行阻塞 5.线程的组织与控制
要管理线程需要给线程建立对应的数据结构即线程控制块TCB。
与进程控制块(PCB)类似当某个线程要下CPU时某些必要的寄存器信息要保存到PCB中当要重新上CPU时再根据线程控制块取出相应寄存器的值重新放到寄存器中 多个进程的PCB组织起来就可以形成线程表 线程的组织方式有很多可以一个进程的所有线程组成线程表或者是所有进程的线程组成线程表或者根据线程状态不同组成线程表。不同的系统可以采取不同的策略。