多線程之進程與線程

来源:http://www.cnblogs.com/zhanghu52030/archive/2017/05/26/6909330.html
-Advertisement-
Play Games

進程與線程 進程:是操作系統結構的基礎;是一個正在執行的程式;電腦中正在運行的程式實例;可以分配給處理器並由處理器執行的一個實體;由單一順序的執行顯示,一個當前狀態和一組相關的系統資源所描述的活動單元。 進程的概念主要有兩點: 第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括 ...


進程與線程

進程:是操作系統結構的基礎;是一個正在執行的程式;電腦中正在運行的程式實例;可以分配給處理器並由處理器執行的一個實體;由單一順序的執行顯示,一個當前狀態和一組相關的系統資源所描述的活動單元。

進程的概念主要有兩點:

  第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(text region)、數據區域(data region)和堆棧(stack region)。

  • 文本區域存儲處理器執行的代碼。
  • 數據區域存儲變數和進程執行期間使用的動態分配的記憶體。
  • 堆棧區域存儲著活動過程調用的指令和本地變數。

  第二,進程是一個“執行中的程式”。運行中的進程可能具有以下三種基本狀態:就緒狀態(Ready),運行狀態(Running)和阻塞狀態(Blocked)。

線程:有時被稱為輕量級進程(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共用進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以併發執行。由於線程之間的相互制約,致使線程在運行中呈現出間斷性。線程也有就緒、阻塞和運行三種基本狀態。每一個程式都至少有一個線程,若程式只有一個線程,那就是程式本身。

  線程是程式中一個單一的順序控制流程。在單個程式中同時運行多個線程完成不同的工作,稱為多線程

  在多線程OS中,通常是在一個進程中包括多個線程,每個線程都是作為利用CPU的基本單位,是花費最小開銷的實體。線程具有以下屬性:

  1)輕型實體

  線程中的實體基本上不擁有系統資源,只是有一點必不可少的、能保證獨立運行的資源,比如,在每個線程中都應具有一個用於控制線程運行的線程式控制制塊TCB,用於指示被執行指令序列的程式計數器、保留局部變數、少數狀態參數和返回地址等的一組寄存器和堆棧。

  2)獨立調度和分派的基本單位。

  在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調度和分派的基本單位。由於線程很“輕”,故線程的切換非常迅速且開銷小。

  3)可併發執行。

  在一個進程中的多個線程之間,可以併發執行,甚至允許在一個進程中所有線程都能併發執行;同樣,不同進程中的線程也能併發執行。

  4)共用進程資源。

  在同一進程中的各個線程,都可以共用該進程所擁有的資源,這首先表現在:所有線程都具有相同的地址空間(進程的地址空間),這意味著,線程可以訪問該地址空間的每一個虛地址;此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構等。

線程與進程的區別可以歸納為以下幾點:

  1)地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共用。某進程內的線程在其它進程不可見。

  2)通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變數)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。

  3)調度和切換:線程上下文切換比進程上下文切換要快得多。

  4)在多線程OS中,進程不是一個可執行的實體。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 活躍性危險 一、死鎖 發生:每個人都不願意放棄自己的鎖,確想要別人的鎖,這就會導致死鎖 1.鎖順序死鎖:如果每個線程以固定的順序獲取鎖,那麼至少在程式中不會出現鎖順序導致的死鎖; 因為順序固定如:所有線程:A-B-C 則無問題,如果一個A-B B-A則會發生死鎖 例子1:簡單死鎖 例子2:轉賬死鎖 ...
  • 轉自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一、BMP文件由文件頭、點陣圖信息頭、顏色信息和圖形數據四部分組成。 顏色表用於說明點陣圖中的顏色,它有若幹個表項,每一個表項是一個RGBQUAD類型的結構,定義一種顏色。RGBQ ...
  • java存儲: 1)寄存器:這是最快的存儲區,位於處理器的內部。但是寄存器的數量有限,所以寄存器根據需求進行分配。我們不能直接進行操作。 2)堆棧:位於通用RAM中,可以通過堆棧指針從處理器那裡獲取直接支持。堆棧指針往下移動,則分配新的記憶體。網上移動,則釋放記憶體。但是 在創建程式的時候必須知道存儲在 ...
  • w3c 中的定義:鏈接 <a>http://www.w3school.com.cn/jquery/event_change.asp<a> jQuery 事件 - change() 方法 定義和用法 當元素的值發生改變時,會發生 change 事件。 該事件僅適用於文本域(text field),以及 ...
  • Python進階 對象,名字以及綁定 1、一切皆對象 哲學: Python中一切皆對象 1.1 數據模型 對象,值以及類型 對象是 對數據的抽象。 程式中所有的數據都是對象或對象之間的關係表示的。(在某種意義上,為順應馮·諾依曼“存儲式電腦”的模型, 中的代碼也是對象。) 中每一個對象都有一個身份 ...
  • 1 2 3 4 5 ...
  • 1.get與post的區別 Get和Post方法都是對伺服器的請求方式,只是他們傳輸表單的方式不一樣。 下麵我們就以傳輸一個表單的數據為例,來分析get與Post的區別 1.1 get方法 jsp中的代碼form表單代碼 1.2 action包中servlet的doGet方法中的代碼 註意:acti ...
  • 一、任務和執行策略之間的隱性耦合 Executor可以將任務的提交和任務的執行策略解耦 只有任務是同類型的且執行時間差別不大,才能發揮最大性能,否則,如將一些耗時長的任務和耗時短的任務放在一個線程池,除非線程池很大,否則會造成死鎖等問題 1.線程饑餓死鎖 類似於:將兩個任務提交給一個單線程池,且兩個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...