操作系统中的线程

news2024/11/29 14:52:34

我的GitHub:Powerveil · GitHub

我的Gitee:Powercs12 (powercs12) - Gitee.com

皮卡丘每天学Java

进程就是 任务,跑起来的程序 系统使用 PCB 描述进程,使用双向链表来管理进程

进程存在的意义就是让操作系统可以同时执行多个任务,从而实现“并发编程”(并发+并行)的效果 就可以充分的利用到 多核 CPU 资源

虽然多进程已经实现了并发编程了,但是存在重要的问题,如果频繁的创建/销毁进程,这个系统就比较低效

例如写一个服务器程序,就可以针对每个客户端分别创建一个进程,去提供服务

服务器这里可能又多个客户端,每次有个新的客户端来了,都要创建一个进程来服务,客户端走了,进程就销毁 进程创建销毁太频繁,效率是比较低的。

进程创建步骤:

  1. 创建 PCB

  2. 给进程分配资源(内存/文件),赋值到 PCB 中

  3. 把 PCB 插入链表

进程销毁的步骤:

  1. 把 PCB从链表上删除

  2. 把 PCB 中只有的资源释放

  3. 销毁 PCB

其中创建进程第二步分配资源,销毁进程中的第二步释放资源是比较消耗时间的,于是发明了线程。

线程是被包含在进程中的,一个进程默认会有一个线程,当然也可以有多个线程,每个线程都是一个 “执行流” 可以单独的在 CPU 上进行调度,同一进程中的这些线程公用一份系统资源(内存+文件)

所以线程 成为 “轻量级进程”,创建线程的开销比创建进程小,销毁线程的开销比销毁进程小。

使用多线程:

  1. 更够充分利用上多核 CPU,能够提高效率

  2. 只是创建一个线程的时候,需要申请资源,后序再创建新的线程都是共用一份资源(节省了申请资源的开销)销毁线程的时候,也只是销毁到最后一个的时候才真正释放资源,前面的线程销毁,都不必真释放资源

操作系统内核,是通过 PCB 来描述进程的 更准确的说法,是一组 PCB 来描述一个进程,每个 PCB 对应一个线程 一个进程至少有一个线程,也可以有多个。

这一组 PCB 的内存地址文件描述符表其实是同一分东西,而 状态上下文优先级记账信息则是每个 PCB (每个线程)自己有一份

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

线程是 调度执行 的基本单位

一个非常重要的面试题:谈谈进程和线程之间的区别

  1. 进程包含线程

  2. 线程比进程更轻量,创建更快,销毁也更快

  3. 同一个今进程的多个线程之间共用同一份内存/文件资源,进程和进程之间则是独立的内存/文件资源

  4. 进程是资源分配的基本单位,线程是调度执行的基本单位

举个例子

需求:一个人要吃200只鸡

 

一、多进程方案

用两个房间,两套桌子,两个人,每个人吃100只即可,效率++,劣势也很明显,成本是比较高的,优势:两个人相互之间不会干扰

 

二、多线程

只是多叫一个人,成本低了,效率仍然能够提升,缺点:彼此之间可能会相互影响

 

三、继续增加人

当人的数量再次提高,效率仍然能上升

 

当人的数量进一步提升的时候,把桌子围满了,此时新增的人抢不到位置,此时效率无法继续提升了 而且,人们挤来挤去,导致正在吃的人正常吃鸡(影响效率)

 

对应到多线程上,线程数量也不是越多越好。CPU 核心数是有限的,当线程数目达到一定程度的时候,CPU 核心数就已经被吃满了,此时继续增加线程,也无法再提高效率,反而会因为线程太多,线程调度开销太大,影响效率。

四、线程之间可能会相互影响

 

两个人争抢一个鸡,发生争执

线程不安全,如果两个线程同时修改同一个变量,也容易产生“线程不安全”的问题

五、如果某个线程发生了意外,此时很可能就把整个进程带走(其他线程无法工作)

 

如果一个人吃着吃着不开心把桌子掀翻了,其他人都没有办法继续吃

如果某个线程执行过程中出现异常,并且异常没有处理好的话,整个进程都会随之崩溃,这个时候后序其他线程自然难以进程运行。

其实操作系统调度 PCB,每个 PCB 就是一个线程

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

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

相关文章

(node中)module.exports 和exports的区别

(node中使用)module.exports 和exports的区别是什么? 用一句话来说明就是,require只会去引用module.exports这个对象的导出,不会引用exports对象的,而我们在编写模块时(初始化)用到的exports对…

微服务框架 SpringCloud微服务架构 分布式缓存 44 Redis 分片集群 44.4 故障转移

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式缓存 文章目录微服务框架分布式缓存44 Redis 分片集群44.4 故障转移44.4.1 故障转移44.4.2 数据迁移44 Redis 分片集群 44.4 故障转移…

[附源码]Python计算机毕业设计高等数学在线学习平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

零基础怎么学Python?要学多久?

首发内容,希望从各个角度为大家解答Python的学习方向,能够帮助更多入门的同学们。 一、为什么学Python 是因为铺天盖地的广告还是要转行,有本职工作希望自动化办公还是爱好? (1)有本职工作觉得应该学Pyt…

你一定要了解的NAT工作原理

大家好,我是技福的小咖老师。 前两天给大家分享了NAT策略问题的23个问题,有朋友私信我,想再普及一下NAT基础知识。今天咱们就来复习下NAT的工作原理。 随着网络应用的增多,IPv4地址枯竭的问题越来越严重。尽管IPv6可以从根本上解…

mybatis06:Mybatis注解开发

目录 1 MyBatis的常用注解 1.1注解完成基本的crud 例题演示 1.2mybatis的注解复杂查询映射开发 例题演示 1 MyBatis的常用注解 这几年来注解开发越来越流行,Mybatist也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。我们先用绕一些基…

mongoDB使用总结

windows安装 zip压缩包方式安装 下载 注意:因为现在最新版的mongodb不兼容win7,对windows系统的最低要求是win10。所以win7系统要安装mongodb数据库必须考虑使用旧版安装。 Download MongoDB Community Server | MongoDB 解压 将压缩包解压放在指定位置&#x…

世界杯,来一起“唠嗑”呀!

自人类诞生起,娱乐与社交便是融入群体、参与群体行动的“必需品”。娱乐与社交的结合使得人们更加容易找寻同类、拉近同类关系,而四年一届的世界杯正是娱乐与社交的完美融合体。作为全球最富影响力的体育赛事之一,每一届世界杯都影响着全球几…

thinkphp中 Db::query()和Db::name()区别 $db->query($sql); ->相当于访问类里面的方法

Db::query()是原生sql查询。 例如 Db::query(“select * from cmf_user where id9”); Db::name()是thinkphp基于原生sql二次封装的sql查询。 例如Db::name(‘user’)->where(‘id’,9)->find(); db是一个实例化好的数据库类,query是这个类里面的一个方法&am…

PMP每日一练 | 考试不迷路-12.14(包含敏捷+多选)

被延期考试的宝子 一定要坚持刷题 每日5道PMP习题助大家上岸PMP! ​题目1-2: ​1.一位主要相关方要求将每日站立会议的持续时间人15分钟增加到1小时。Scrum主管应该做什么? ( ) A.接受建议并建议团队更改会议时间表 B.安排与产品负责人和团队…

内网穿透用什么软件好?本地设置内网端口映射到外网访问

我们经常听到有人说在用内网穿透工具,那么内网穿透工具有什么作用呢?内网穿透工具的作用是将本地内网服务器和应用提供到互联网上连接访问,可以解决在无公网IP条件下跨网互通互连问题。比如在家远程办公,访问公司内部办公OA服务器…

Socket.IO与Atmosphere比较

最近接到一个新需求,前后端保持状态连接,实现动态刷新的效果。那第一个想到的就是websocket,但是websocket我们知道有一个缺陷就是兼容性比较差(如下图红色表示不兼容的浏览器版本),受网络限制比较大。 我…

常考vue面试题(附答案)

Vue生命周期钩子是如何实现的 vue的生命周期钩子就是回调函数而已,当创建组件实例的过程中会调用对应的钩子方法内部会对钩子函数进行处理,将钩子函数维护成数组的形式 Vue 的生命周期钩子核心实现是利用发布订阅模式先把用户传入的的生命周期钩子订阅好…

2022年山东建筑安全员考试真题题库及答案

百分百题库提供建筑安全员考试试题、安全员证考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 142.施工现场内的()等机械设备,以及钢脚手架和正在施工的在建工程等的金属结构,当在相邻建筑物、构筑物等设施防雷装置接闪…

C++ Reference: Standard C++ Library reference: Containers: map: map: clear

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/clear/ 公有成员函数 <map> std::map::clear C98 void clear(); C11 void clear() noexcept;清除内容 从map容器中删除所有元素&#xff08;已销毁&#xff09;&#xff0c;使容器的size为0。 形参 …

【Kafka】Mac下安装与使用,SpringBoot整合案例

【Kafka】Mac下安装与使用&#xff0c;SpringBoot整合案例&#xff08;一&#xff09;下载安装&#xff08;二&#xff09;测试用例【1】启动zookeeper【2】启动kafka【3】创建Topic【4】查看Topic【5】删除Topic【6】生产/消费数据【7】查看消费组【8】查看消费组详情&#xf…

太卷了,这份Java架构师晋升指南首次公开,GitHub下载量已破百万

最近和各位小伙伴儿私下聊的比较多&#xff0c;各个阶段的朋友都有&#xff1b;因为大环境的内卷&#xff0c;导致大家在求学、求职、提升自己的各个方面都多多少少有些迷茫焦虑&#xff1b; 这些其实是一个非常普遍且正常的现象&#xff0c;会焦虑的人&#xff0c;往往都是对…

智云通CRM:那些令你无法控制的销售局面(二)

1、向并不合适的潜在客户进行销售 选对战场是分配资源的关键。对于那些销售工作很复杂的业务员来说&#xff0c;他们当中的大多数一年最多会有10-20次的机会&#xff0c;可是有些时候&#xff0c;最后他们手里的机会也就剩下一个了。挑选不合适的潜在客户会消耗许多资源。 2、…

家电供应链再遭新风险,SCM供应链管理系统加快业务流转提升企业内控水平

在疫情不断反复的影响下&#xff0c;刚刚进入复苏阶段的家电企业再次面临新一轮危机。2022年一季度&#xff0c;中国家电实现零售额1430亿元&#xff0c;同比下降11.1%&#xff1b;线上家电零售市场下降7.5%。海关数据显示&#xff0c;前两个月&#xff0c;家电产品海外出口规模…

[附源码]计算机毕业设计的校园报修平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…