操作系統 --- 線程與進程的比較

如果說,在操作系統中引入進程的目的是為了使多個程序能并發執行,以提高資源利用率和系統吞吐量,那么在操作系統中再引入線程,則是為了減少程序在并發執行時所付出的時空開銷,使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.pswp.cn/news/251289.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251289.shtml
英文地址,請注明出處:http://en.pswp.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