第二章 进程与线程 六、线程的实现方式和多线程模型

2023-09-16 16:16:53

目录

一、线程的实现方式

1、用户级线程

2、内核级线程

二、多线程模型

注意:

1、一对一模型

(1)定义:

(2)优点:

(3)缺点:

2、多对一模型

(1)定义:

(2)优点:

(3)缺点:

3、多对多模型

(1)定义:

(2)优点:

(3)注意: 

三、线程的组织与控制

总结:


一、线程的实现方式

1、用户级线程

(1)用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)

(2)用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。

(3)在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。“用户级线程”就是“从用户视角看能看至的线程”。

(4)优点:

用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

(5)缺点:

当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。

2、内核级线程

(1)内核级线程的管理工作由操作系统内核完成。

(2)线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。

(3)操作系统会为每个内核级线程建立相应的TCB (Thread Control Block,线程控制块),通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”

(4)优点:

当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
(5)缺点:

一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
 

二、多线程模型

注意:

1、一对一模型

(1)定义:

一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

(2)优点:

当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。

(3)缺点:

一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
 

2、多对一模型

(1)定义:

多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

(2)优点:

用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

(3)缺点:

当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行
 

3、多对多模型

(1)定义:

n用户及线程映射到m个内核级线程(n >= m) 。每个用户进程对应m个内核级线程。

(2)优点:

克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞)),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

(3)注意: 

1.内核级线程才是处理机分配的单位。例如:多核CPU环境下,左边这个进程最多能被分配两个核。

2.用户级线程是“代码逻辑”的载体。

3.内核级线程是“运行机会”的载体。

三、线程的组织与控制

总结:


 

更多推荐

华为云云耀云服务器L实例评测|基于L实例使用Docker部署MySQL服务并连接MySQL—phpMyAdmin管理工具

文章目录一、云耀云服务器产品优势1、智能不卡顿2、价优随心用3、上手更简单4、管理更省心二、远程连接云耀云服务器L实例三、安装Docker、docker-compse1、docker安装2、docker-compose安装四、方法①使用Docker安装部署MySQL服务五、方法②使用docker-compse安装部署M

ELK 企业级日志分析系统

ELK概述:1、ELK简介ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。●ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。E

免杀对抗-Python-混淆算法+反序列化-打包生成器-Pyinstall

Python-MSF/CS生成shellcode-上线cs上线1.生成shellcode-c或者python2.打开pycharm工具,创建一个py文件,将原生态执行代码复制进去shellcode执行代码:importctypesfromdjango.contrib.gisimportptr#cs#shellcode=

完整指南:使用JavaScript从零开始构建中国象棋游戏

引言中国象棋,又被称为国际象棋,是一款起源于中国的古老棋类游戏。本文旨在为大家提供一个简单明了的步骤,教你如何使用JavaScript从零开始构建这款经典的棋类游戏。1.游戏简介在中国象棋中,两方各有一军队,包括士、象、车、马、炮和卒等棋子,目标是将对方的“将”或“帅”给将死,达到胜利。2.准备工作首先,确保你的开发环

文举论金:黄金原油全面走势分析

市场没有绝对,涨跌没有定势,所以,对市场行情的涨跌平衡判断就是你的制胜法宝。欲望!有句意大利谚语:让金钱成为我们忠心耿耿的仆人,否则,它就会成为一个专横跋扈的主人。空头,多头都能赚钱,唯有贪心不能赚。是你掌控欲望还是欲望掌控你?古人云:不积硅步无以至千里,不积小流无以成江海。希望这句话成为我们之间的共勉。自知!人贵自知

SpringCloud:Feign实现微服务之间相互请求

文章目录🎉欢迎来到架构设计专栏~SpringCloud:Feign实现微服务之间相互请求☆*o(≧▽≦)o*☆嗨~我是IT·陈寒🍹✨博客主页:IT·陈寒的博客🎈该系列文章专栏:架构设计📜其他专栏:Java学习路线Java面试技巧Java实战项目AIGC人工智能数据结构学习🍹文章作者技术和水平有限,如果文中出现

Go的并发的退出

有时候我们需要通知goroutine停止它正在干的事情,比如一个正在执行计算的web服务,然而它的客户端已经断开了和服务端的连接。Go语言并没有提供在一个goroutine中终止另一个goroutine的方法,由于这样会导致goroutine之间的共享变量落在未定义的状态上。在8.7节中的rocketlaunch程序中

什么是区块链,解释区块链的原理和应用场景

1、什么是区块链,解释区块链的原理和应用场景。区块链是一种分布式数据库,它由一系列按照时间顺序排列的数据块组成,并采用密码学方式保证不可篡改和不可伪造。区块链技术最初起源于比特币,作为比特币的底层技术,用于去中心化和去信任地维护一个可靠的数据库。相比于传统的网络,区块链具有数据难以篡改和去中心化的两大核心特点,使得区块

【数据库入门到精通】mysql的存储过程实战

前言🏠个人主页:我是沐风晓月🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云社区专家博主😉😉💕座右铭:先努力成长自己,再帮助更多的人,一起加油进步🍺🍺🍺💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘可以关注我的云原生社区:云原生社区也可以关注我的英语社区:

Input子系统 - Kernel驱动程序 - Android

Input子系统-Kernel驱动程序-Android1、Input子系统相关定义1.1代码位置1.2input_dev结构体:表示输入设备1.3input_handler结构体:structinput_handler-implementsoneofinterfacesforinputdevices1.4input_h

elasticsearch基础篇

目录1.mysql与elasticsearch2.索引库操作2.1.mapping映射属性2.2.索引库的CRUD2.2.1.创建索引库和映射2.2.2.查询索引库2.2.3.修改索引库2.2.4.删除索引库2.2.5.总结3.文档操作3.1.新增文档3.2.查询文档3.3.删除文档3.4.修改文档3.4.1.全量修改

热文推荐