【操作系统】线程、多线程

为什么要引入线程?

      传统的进程只能串行的执行一系列程序,线程增加并发度。同一个进程分为多个线程。

 

线程是调度的基本单元,程序执行流的最小单位,基本的CPU执行单元。

进程是资源分配的基本单位。

d93dd0ff291946329c7fb2441d074a56.png

 

线程的实现方式

用户级线程

       代码中用线程库实现的线程,操作系统还是只看到进程。

优点:管理用户级线程开销小,不用用户态和内核态切换。

缺点:一个线程被阻塞,整个进程都被阻塞,并行差。

内核级线程

      操作系统内核管理内核级线程,需要在核心态下完成,从操作系统内核视角可以看到线程。

优缺点与前者相反。

 

内核级线程才是处理机的分配单位。

 

多线程模型

 

133b22b4222b4c67bf8af550c6b2df95.png

用户级线程是"代码逻辑"的载体

内核级线程是"运行机会"的载体

 

线程的状态与转换与进程一样

TCB (线程控制块)

线程标织符TID,程序计数器PC,其他寄存器,堆栈指针,线程运行状态,优先级。

线程表:存放多个TCB的表

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140657.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试/测试开发丨利用人工智能ChatGPT自动生成架构图

点此获取更多相关资料 简介 架构图通过图形化的表达方式,用于呈现系统、软件的结构、组件、关系和交互方式。一个明确的架构图可以更好地辅助业务分析、技术架构分析的工作。架构图的设计是一个有难度的任务,设计者必须要对业务、相关技术栈都非常清晰…

LeetCode【174. 地下城游戏】

一片丹心图报国,两行清泪为忠家。——于谦 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康…

【Node.js】数据库配置与操作、Session实现原理、JWT实现原理:

文章目录 一、数据库配置与操作【1】 数据库的基本操作【2】 使用 mysql 模块操作 MySQL 数据库 二、Session实现原理【1】HTTP 协议的无状态性【2】Cookie【3】Session 的工作原理【3】在 Express 中使用 Session 认证 三、JWT实现原理【1】JWT 的工作原理【2】JWT 的组成部分…

使用 PyTorch 的计算机视觉简介 (6/6)

一、说明 本文主要介绍CNN中在pytorch的实现,其中MobileNet 网络,数据集来源,以及训练过程,模型生成和存储,模型调入等。 二、轻量级网络和移动网络 我们已经看到,复杂的网络需要大量的计算资源&#xff0c…

前端开发中,文本单行或多行溢出使用省略号显示

1.文本单行溢出使用省略号显示 关键代码如下: .box1{width: 200px;height: 30px;line-height: 30px;margin: 0 auto;background-color: rgba(220, 220, 220, 0.751);/* 单行文本超出隐藏 用省略号代替 */white-space: nowrap;overflow: hidden;text-overflow: ellip…

RabbitMQ工作模式——Topics模式

1.Topics通配符模式 *是一个单词,#是0到多个单词 Topics模式生产者代码 public class Producer_Topic {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//…

基于SpringBoot的的师生健康信息管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 学生功能模块 教师功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也…

metinfo_5.0.4 EXP Python脚本编写

文章目录 metinfo_5.0.4EXP编写SQL注入漏洞 metinfo_5.0.4EXP编写 SQL注入漏洞 漏洞点:/about/show.php?langcn&id22 http://10.9.75.142/metInfo_5.0.4/about/show.php?langcn&id22验证漏洞(数字型注入) 状态码区分正确与错误 做比较的时候不能采用…

SkyWalking分布式链路追踪学习

为什么要用分布式链路追踪 实际生产中,面对几十个、甚至成百上千个的微服务实例,如果一旦某个实例发生宕机,如果不能快速定位、提交预警,对实际生产造成的损失无疑是巨大的。所以,要对微服务进行监控、预警&#xff0…

【操作系统笔记三】内存寻址

物理寻址 主存(内存) 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址(Physical Address)CPU访问内存前,先拿到内存地址,然后…

Failed to load the JNI shared library “D:\...\jvm.dll

1.解决办法: 64-bit Eclipse requires a 64-bit JVM, and 32-bit Eclipse requires 32-bit JVM--you can not mix-and-match between 32-bit and 64-bit. 2.问题: 下载了Eclipse4.16,openjdk8,双击安装Eclipse无法启动&#x…

git常用命令 Git常用命令 git常用操作 git 操作

git常用命令 Git常用命令 git常用操作 git 操作 示例仓库地址初始化本地仓库克隆仓库代码查看当前仓库的状态,包括已修改但未提交的文件添加提交文件提交更改查看提交历史记录查看分支列表切换分支合并一个指定的分支到当前分支拉取远程仓库最新代码推送到远程仓库推…

高级运维学习(九)块存储、文件系统存储和对象存储的实现

块存储基础 块设备存取数据时,可以一次存取很多。字符设备只能是字符流 [rootceph1 ~]# ll /dev/sda brw-rw---- 1 root disk 8, 0 Dec 12 13:15 /dev/sda # b表示block,块设备[rootceph1 ~]# ll /dev/tty crw-rw-rw- 1 root tty 5, 0 Dec 12 13:31 /d…

数据结构—堆(C语言实现)

目录 堆是什么? 一、大堆 一、小堆 如何实现堆? 代码实现 ? 一、定义堆的结构体 二、初始化堆 三、构建堆 1.利用向下调整算法 2.开始构建 四、插入元素 1.利用向上调整算法 五、取出堆顶元素、销毁堆 六、堆排序 Extra&#…

JavaEE--线程基础(中)

volatile 修饰的变量, 能够保证 “内存可见性” 上述过程的完整代码如下: public class Demo14 {//使用locker对象负责加锁,wait,notifyprivate static Object lockernew Object();public static void main(String[] args) {Thread t1new T…

【前段基础入门之】=>HTML结构进阶【列表;表格;表单】

前言 在上一章节中,我们学习了讲述了 html 中的一些常用排版标签,以及一些文本标签和超链接等相关知识。本章节将重点给大家带来 HTML 中【列表,表格,表单】的使用讲解。 目录 列表有序列表无序列表自定义列表 表格表格的基本结构…

为什么网络安全缺口很大,而招聘却很少?学网络安全真的没有前途吗?

2020年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢&#xff1…

Kubernetes中Pod的扩缩容介绍

Kubernetes中Pod的扩缩容介绍 在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需 要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。 Kubernetes 对 Pod 的扩…

opencv形状目标检测

1.圆形检测 OpenCV图像处理中“找圆技术”的使用-图像处理-双翌视觉OpenCV图像处理中“找圆技术”的使用,图像处理,双翌视觉https://www.shuangyi-tech.com/news_224.htmlopencv 找圆心得,模板匹配比霍夫圆心好用 - 知乎1 相比较霍夫找直线算法, 霍夫找…

如何安全传输存储用户密码?(程序员必备)

前言 我们开发网站或者APP的时候,首先要解决的问题,就是「如何安全传输和存储用户的密码」。一些大公司的用户数据库泄露事件也时有发生,带来非常大的负面影响。因此,如何安全传输存储用户密码,是每位程序员必备的基础…