操作系统 --- 线程与进程的比较

如果说,在操作系统中引入进程的目的是为了使多个程序能并发执行,以提高资源利用率和系统吞吐量,那么在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS(操作系统)具有更好的并发性…

我们再回顾一下进程的两个基本属性:
1.进程是一个可拥拥有资源的独立单位,一个进程要能独立运行,它必须拥有一定的资源(用于存放程序、数据的磁盘和内存地址空间,以及它在运行时所需要的I/O设备、已打开的文件、信号量等);
2.进程同时是一个可独立调度和分配的基本单位,一个进程要能独立运行,它还必须是一个可独立调用和分派的基本单位。每个进程在系统中由唯一的PCB(Process Control Blck,进程控制块),系统可根据其PCB感知进程的存在,也可以根据其PCB中的信息,对进程进行调度,还可以将断点信息保存在其PCB中.反之,再利用进程PCB中的信息来恢复进程运行的现场。

程序并发执行所需付出的时空开销
为使程序能并发执行,系统必须进行以下的一系列操作:
1.创建进程,系统在创建一个进程时,必须为它分配其所必需的、除处理机以外的所有资源,如内存空间、I/O设备,以及建立相应的PCB;
2.撤消进程,系统在撤销进程时,又必须先对其所占有的资源执行回收操作,然后在撤销PCB;
3.进程切换,对进程进行上下文切换时,需要保留当前进程的CPU环境,设置新选中进程的CPU环境,因而须花费不少的处理机时间.

由上可知:由于进程是一个资源的拥有者,因而在创建、撤消和切换中,系统必须为之付出较大的时空开销.这就限制了系统中所设置进程的数目,而且进程切换也不宜过于频繁,从而限制了并发程度的进一步提高.

线程------作为调度和分派的基本单位
线程的概念:设法将进程的两个基本属性(独立资源和PCB)分开,由OS分开处理:不把作为调度和分派的基本单位也同时作为拥有资源的单位;对于拥有资源的基本单位,不频繁的切换.

线程与进程的比较
1.调度的基本单位:
在传统的OS中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位.在每次被调度时,都需要进行上下文切换,开销很大。而在引入线程的OS中,已把线程作为调度和分派的基本单位,因而线程是独立运行的基本单位.当线程切换时,仅需保存和设置少量寄存器内容,切换代价远低于进程.在同一进程中,线程的切换不会引起进程的切换,但从一个进程的线程切换到另一个进程中的线程时,必然会引起进程的切换.

2.并发行
在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,甚至还允许在一个进程中的所有线程都能并发执行.同样,不同的线程也能并发执行.这使得OS具有更好的并发性,从而能更加有效地提高系统资源地利用率和系统地吞吐量.
例如:一个网络服务器经常会接到许多客户地请求,如果仍采用传统的单线程的进程来执行该任务,则每次只能为一个客户服务.但如果在一个进程中可以设置多个线程,将其中的一个专用于监听客户的请求,则每当有一个客户请求时,便立即创建一个线程来处理该客户的请求.

3.拥有资源
进程可以拥有资源,并作为系统中拥有资源的一个基本单位.然而,线程本身并不拥有系统资源,而仅有一点必不可少的、能够保证独立运行的资源.
例如:在每个线程中都应具有一个用于控制线程运行的线程控制块(TCB,Thread Control Block)、用于指是被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈.

4.独立性
在同一进程中的不同线程之间的独立性要比不同进程之间的独立性要低得多.这是因为,为防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其他资源,除了共享全局变量外,不允许其他进程的访问.但同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问它们所属进程地址空间中的所有地址
例如:一个线程的堆栈可以其他线程读、写,甚至完全清除.有一个线程打开的文件可以供其他线程读、写.

5.系统开销
在创建或撤消进程时,系统都要为之分配和回收进程控制块、分配或回收其他资源,如内存空间和I/O设备等.OS为此付出的开销,明显大于线程创建或撤消时所付出的开销
例如:在Solaris 2 OS中,线程的创建要比进程的创建快30倍,而线程上下文切换要比进程上下文切换快5倍.

6.支持多处理机系统
在多处理机系统中,对于传统的进程,即单线程的进程,不管有多少处理机,该进程只能运行在一个处理机上.但对于多线程进程,就可以将一个进程的多个线程分配到多个处理机上,使它们并发执行,这无疑将加速进程的完成

参考《计算机操作系统》(第4版) P82~P84

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

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

相关文章

24种吸引人的营销文章标题写法,总有一个适合你!

在如今信息爆炸的互联网时代下,如何提高提高文章的阅读(新闻稿、软文宣传稿、微信公众号),成为从业者们共同研究的课题?首先你得有一个足够吸引的标题,尤其是定向推送的时候,这将是由一个质变带来量变的过程。小编虽然不提倡标题…

[js] 处理字符串换行造成的json解析失败

需求:从数据库某个字段取出字符串出来,转为json,结果发现报错为 解析失败,发现是因为取出的字符串换行导致,现在需要将字符串里面的换行替换为,使字符串可依成功解析成json对象。 技术:依靠repl…

使用mockjs模拟数据

一、安装 简单粗暴 npm install mockjs 二、引入 CommonJS引入 let Mock require(mockjs) let userInfo Mock.mock({data: {responseCode: 200,responseMessage: success,userMessage: {name: "cname",email: "email",msg: cparagraph(2)}} })或者ES…

angular --- ngDialog关闭当前层

今天做项目,使用ngDialog 弹出了一层,并且在弹出层上又弹出了第二层. 现在想点击确定按钮关闭第二层. 使用以前的ngDialog.close()会关闭掉全部ngDialog.open方法弹出来的层. 在网上查了一堆,找了好多,最后发现就一句话.$scope.closeThisDialog(); 注意, 要在controller:中传递…

lodash源码分析之compact中的遍历

小时候, 乡愁是一枚小小的邮票, 我在这头, 母亲在那头。 长大后,乡愁是一张窄窄的船票, 我在这头, 新娘在那头。 后来啊, 乡愁是一方矮矮的坟墓, 我在外头, 母亲在里头。…

[HAOI2008]移动玩具

这又是一道神奇的搜索题。。。只要记录每种状态。。。然后暴力判断这种状态往后一步的情况。。。 广搜出最优解即可。。。 呆码&#xff1a; #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std;int dx[5]{0…

javascript --- Sortable一个拖拽的接口

最近项目里面要实现需要实现一个拖拽功能,自己实现很麻烦,就在网上找到了一个封装好的sortable函数,github(https://github.com/SortableJS/Sortable). 首先是依赖的引入:(也可以自己下载源代码导入,方式很多呢) <body><!-- Latest compiled and minified CSS -->…

个人发展战略6天课

第一课 冰山模型 【知道自己为什么会不喜欢一份工作】 衡量和一个岗位是否匹配、匹配程度如何 从上到下的要素 知识技能&#xff08;30%&#xff09;特定领域 - 可以后天学习的&#xff0c;显性的、容易看出来的 和工作的关系&#xff1a; 工作中有陌生的内容&#xff0c;每天…

《Web全栈工程师的自我修养》

1. 什么是全栈工程师 Full-Stack Engineer Facaebook只招全栈工程师&#xff1f; Web开发流程 产品经理-->交互设计-->视觉设计-->开发&#xff08;前端、后端&#xff09;-->测试-->发布 流水线的优势 “各司其职”的弊端 工程师职责不清导致效率低工程师缺乏主…

div设置overflow-scroll滚动之后,jq获取其子元素的offset.top出现问题。

先上个图&#xff1a; 布局很简单&#xff0c;左右超过屏幕的部分自行滚动。 1. html <div class"ce-container"><div class"ce-leftBox">//左边的内容</div><div class"ce-rightBox">//右边的内容 </div…

javascript --- 利用Sortable实现一个可视化公式编辑器

Sortable的依赖引入和简单使用参见:https://blog.csdn.net/piano9425/article/details/90437182 先简单的介绍一下可视化公式编辑器的功能(样式没有调,毕竟每个人的需求都不一样): 首先会有2个需要计算的(我称为操作数)A_XiangRaoZuWenSheng和AYKZQ_CS,以及两个操作符ADD(加法…

使用uni-app搭建微信小程序

0 问题待解决 import { } 与否为什么要封装对齐问题每次重启项目&#xff0c;sitemap就会消失动态修改标题失效图片问题多多 &#xff1a;高度自适应 改成image固定高度&#xff0c;mode&#xff1a;aspectFill微信小程序文档b站视频链接后端接口文档 一、知识点 uni-app 是…

HttpTomcat

本节内容&#xff1a; Http协议Tomcat服务器下面开始的一系列内容都是JavaEE的内容&#xff0c;主要的内容见下图。JavaEE主要是做服务器端开发。 JavaEE全部规范&#xff1a;有13门技术&#xff0c;主要做web开发的需要学习servlet和jsp。其他技术&#xff0c;像EJB、 JNDI、J…

python---线程与进程

一 线程 1.1 概述 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务。 Threading用于提供线程相关…

jquery常见操作分享

参考: https://www.cnblogs.com/eager/p/7133270.html

es 插件

类 若 实现NativeScriptFactory接口。A factory to create instances of either {link ExecutableScript} or {link SearchScript} 只是一个工厂类&#xff0c;仍需要 创建 上面二者之一。实际中 需 创建 类 继承 SearchScript接口的实现类AbstractSearchScript 的 子类 Abstra…

使用uni-app报错this.setData is not a function

一、报错 出现this.setData is not a function报错的绝大多数情况是&#xff0c;在回调时&#xff0c;this指向作用域为当前异步方法所在的对象&#xff0c;详见微信小程序异常处理——this.setData is not a function报错处理 二、排查原因 但我并没有在回调中使用this.set…

搭建SpringBoot服务器,在公司内网中使用

搭建SpringBoot服务器&#xff0c;在公司内网中使用。 学习了&#xff1a;https://blog.csdn.net/z3881006/article/details/78902231 就是一个程序&#xff0c;托管于github&#xff1b;https://github.com/spring-io/initializr 转载于:https://www.cnblogs.com/stono/p/9301…

javascrpt --- 使用jquery添加dom元素和Angular ng-repeat生成select性能比较

今天用两种方法实现了动态的给select添加option的功能. 第一种是用jquery. // html <select id"drag-pointList"></select> // js $(#drag-pointList).children(option).remove(); // 清空之前的option let list res.data.list ; // res是ajax请…

任何时候,写下一个类,一定要有三个函数

1、默认构造函数 2、拷贝构造函数 3、虚 析构函数转载于:https://www.cnblogs.com/buddho/p/8076165.html