操作系统中的线程

news/2024/11/28 6:53:59/

我的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.ppmy.cn/news/3419.html

相关文章

抢订单,稳增长!道可云元宇宙平台助力企业竞逐海外市场

受新冠肺炎疫情和国际政治经济形势错综复杂的不利影响,我国的外贸企业普遍面临订单下滑、供应链不畅、经营压力大等困难,国际需求大幅萎缩。随着后疫情时代的来临,我国的疫情防控政策不断优化调整,市场对企业出海抢占商机的关注度…

C语言刷题系列——11.小乐乐与字符串

🚩统计s中子序列“CHN”的个数💜一) 题目要求💙二) 题解法1:暴力算法法2.找规律,累加💜一) 题目要求 描述在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CH…

2022年航空与物流行业研究报告

第一章 行业概况 航空与物流行业是指以各种航空飞行器为运输工具,以空中运输的方式运载人员或货物的企业。航空公司是以各种航空飞行器为运输工具为乘客和货物提供民用航空服务的企业。航空公司使用的飞行器可以是他们自己拥有的,也可以是租来的&#x…

十一月券商金工精选

✦ 研报目录 ✦ ✦ 简述 ✦ 按发布时间排序 国信证券 财报中的竞争对手分析能否用来预测股票收益? 发布日期:2022-11-01 关键词:股票、文本分析、竞争对手 主要内容:竞争对手提及次数被定义为一家公司在全市场所有公司的最新…

基于Kubernetes容器云平台的CI/CD

基于 Kubernetes 实现 CI/CD 配置,其实和往常那些 CI/CD 配置并没有太大区别。都是通过 提交代码,拉取代码,构建代码,发布代码来实现的。 只不过要是通过 K8s 来实现的话,则是需要将构建好的代码打包成镜像,通过镜像的方式来运行。 项目参考: GitHub - zeyangli/devo…

做一个简单网页(做一个简单网页多少钱)

怎样做一个简易的网页?做一个简单网页多少钱 做一个简易的普通网页比较容易。当然,制作的方法有好几种,有的是直接写代码、有的是用绘图软件绘制页面再导出网页、常用的是使用网页制作软件做网页。下面以普通静态网页常规制作方法为例说明制…

java计算机毕业设计课程与成绩管理MyBatis+系统+LW文档+源码+调试部署

java计算机毕业设计课程与成绩管理MyBatis系统LW文档源码调试部署 java计算机毕业设计课程与成绩管理MyBatis系统LW文档源码调试部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术&#…

python3.9.0 windows环境搭建

第一步: 下载安装包:CNPM Binaries Mirror 执行exe安装。。。。。 第二步:升级pip 和 setuptools(避免在每一个虚拟环境中都要升级) python -m pip install --upgrade pip python -m pip install --upgrade setuptoo…