線程及實現方式

一、線程?

????????線程是一個基本的CPU執行單元,也是程序執行流的最小單位。引入線程之后,不僅是進程之間可以并發,進程內的各線程之間也可以并發,從而進一步提升了系統的并發度,使得一個進程內也可以并發處理各種任務(如QQ視頻、文字聊天、傳文件)引入線程后,進程只作為除CPU之外的系統資源的分配單元(如打印機、內存地址空間等都是分配給進程的)。

  1. 線程是處理機調度的單位: 是的,線程是調度的基本單位。在多CPU計算機中,不同線程可以被調度到不同的CPU核上并行執行,這提高了并發性能。

  2. 線程可占用不同的CPU: 正確。在多CPU系統中,不同線程可以并行在不同的CPU核上執行。

  3. 每個線程都有一個線程控制塊(TCB): 是的,線程控制塊是操作系統用來管理和維護線程狀態的數據結構。

  4. 線程有就緒、阻塞、運行三種基本狀態: 是的,這是描述線程在操作系統中可能處于的基本狀態。

  5. 線程幾乎不擁有系統資源: 這取決于線程的類型。用戶級線程(User-Level Threads)通常幾乎不擁有系統資源,而內核級線程(Kernel-Level Threads)由操作系統內核管理系統資源。

  6. 同一進程的不同線程間共享進程的資源: 是的,同一進程內的線程通常共享進程的資源,因為它們擁有相同的地址空間。

  7. 同一進程中的線程間通信無需系統干預: 這取決于線程間通信的方式。在共享內存模型中,線程間通信確實無需系統干預。然而,在其他通信方式(如消息傳遞)中可能需要系統協助。

  8. 同一進程中的線程切換不會引起進程切換: 是的,線程切換通常開銷較小,因為同一進程內的線程共享相同的地址空間和其他資源。

  9. 不同進程中的線程切換會引起進程切換: 是的,不同進程的線程切換涉及到不同的地址空間和資源,通常會引起較大的開銷,因為這實際上是進程切換。

二 、線程實現方式

1. 用戶級線程

用戶級線程(User-Level Threads)是一種線程模型,其中線程的創建、調度和管理完全由用戶空間的應用程序或用戶級線程庫負責,而不涉及操作系統內核。這與內核級線程(Kernel-Level Threads)相對,后者的創建和管理需要操作系統的支持。

以下是用戶級線程的一些特點:

  1. 輕量級: 用戶級線程是輕量級的,因為它們的創建和切換不需要系統調用,而是由用戶級線程庫直接控制。

  2. 快速切換: 由于用戶級線程的切換是在用戶空間完成的,因此切換的開銷通常比內核級線程低。這對于某些需要高度并發和快速響應的應用程序很有優勢。

  3. 無需系統調用: 用戶級線程的創建、調度和銷毀不需要系統調用,這意味著應用程序可以更自由地控制線程的行為,而不受操作系統的限制。

  4. 無法利用多核: 由于用戶級線程的調度由用戶空間的線程庫負責,它們通常無法充分利用多核處理器。如果一個用戶級線程阻塞,整個進程的執行也可能受到影響(它們的調用也是cpu對進程的調度,即進程是最小的調度單位)

  5. 不受操作系統調度策略影響: 用戶級線程的調度完全由應用程序控制,不受操作系統的調度策略的影響。這可能導致一些問題,例如用戶級線程的阻塞可能導致整個進程的阻塞。

  6. 需要處理同步問題: 由于用戶級線程是由用戶空間的線程庫管理的,它們之間的同步問題通常需要由應用程序自己來處理,而不是依賴于操作系統提供的同步機制。

用戶級線程通常在特定應用程序的上下文中使用,對于需要高度優化、靈活性較大的應用程序可能會選擇使用用戶級線程。然而,它們也有一些限制,例如不能充分利用多核處理器以及在面對 I/O 操作時可能導致整個進程的阻塞等

2. 內核級線程

內核級線程(Kernel-Level Threads)是由操作系統內核直接支持和管理的線程。與用戶級線程相對,內核級線程不是由用戶空間的線程庫進行管理,而是直接由操作系統內核負責。這意味著內核級線程在操作系統的層次結構中更加底層,與操作系統內核的調度和管理機制密切相關。

以下是內核級線程的一些特點:

  1. 由內核管理: 內核級線程的創建、調度、撤銷等操作完全由操作系統內核負責,不需要用戶空間的線程庫的干預。

  2. 更重量級: 與用戶級線程相比,內核級線程通常更重量級,因為它們涉及到更多的內核資源和更復雜的上下文切換。

  3. 更高的并發性: 內核級線程能夠更好地利用多核處理器,因為內核可以獨立地將不同的線程調度到不同的處理器核上運行。

  4. 適用于多核系統: 由于內核級線程能夠更好地利用多核系統,它們通常在需要更高并發性的情況下更為合適。

  5. 對同步和互斥的支持: 內核級線程能夠充分利用操作系統提供的同步和互斥機制,因為這些機制通常是在內核中實現的。

  6. 阻塞不影響整個進程: 內核級線程的阻塞不會導致整個進程的阻塞。如果一個內核級線程阻塞,其他內核級線程仍然可以繼續執行。

  7. 上下文切換開銷相對較高: 由于內核級線程的上下文切換涉及到更多的內核資源,因此它們的上下文切換開銷相對較高。

總體而言,內核級線程適用于需要更高度并發性、更好地利用多核處理器的場景。然而,由于其較重的開銷,對于一些輕量級任務,用戶級線程可能更為合適。不同的應用場景和性能需求可能決定了選擇哪種線程模型。

3. 多線程模型?

?

線程的組織和控制?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211943.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211943.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211943.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言的內存函數

memcpy函數 1.調用形式void*memcpy(void*p1,void*p2,int n),表示從第二個位置復制n個字節到第一個位置,而指針類型為void的原因是他可以復制整型字符型甚至指針結構體類型的數據 2.在遇到\0的時候不會停下來,因為函數執行拷貝靠字節數&…

【Hive】——安裝部署

1 MetaData&#xff08;元數據&#xff09; 2 MetaStore &#xff08;元數據服務&#xff09; 3 MetaStore配置方式 3.1 內嵌模式 3.2 本地模式 3.3 遠程模式 4 安裝前準備 <!-- 整合hive --><property><name>hadoop.proxyuser.root.hosts</name><v…

Java+Swing: 主界面組件布局 整理9

說明&#xff1a;這篇博客是在上一篇的基礎上的&#xff0c;因為上一篇已經將界面的框架搭好了&#xff0c;這篇主要是將里面的組件完善。 分為三個部分&#xff0c;北邊的組件、中間的組件、南邊的組件 // 放置北邊的組件layoutNorth(contentPane);// 放置中間的 Jtablelayou…

Tair(3):Tair入門demo

新建一個maven項目 1 導入依賴 <dependency><groupId>com.taobao.tair</groupId><artifactId>tair-client</artifactId><version>2.3.5</version></dependency><dependency><groupId>com.alibaba</groupId>…

計算日期到天數轉換

根據輸入的日期&#xff0c;計算是這一年的第幾天。 保證年份為4位數且日期合法。 輸入描述&#xff1a;輸入一行&#xff0c;空格分割&#xff0c;分別是年&#xff0c;月&#xff0c;日 輸出描述&#xff1a;輸出是這一年的第幾天 輸入&#xff1a;2012 12 31 輸出&#xff…

Python計時器

制作一個簡單的Python計時器 在本教程中&#xff0c;我們將學習如何使用Python制作一個基礎的計時器。這個計時器將能夠開始計時、暫停、繼續和重置時間。 設計思路 為了建立一個計時器&#xff0c;我們需要定義一個能夠跟蹤時間的變量&#xff0c;并且定期更新顯示的時間。…

Linux權限(用戶角色+文件權限屬性)

Linux權限 文章目錄 Linux權限一.文件權限1.快速掌握修改權限的方法&#xff08;修改文件權限屬性&#xff09;2.對比權限的有無&#xff0c;以及具體的體現3.修改權限的第二套方法&#xff08;修改用戶角色&#xff09;4.文件類型&#xff08;Linux下一切皆文件&#xff09; 二…

049:VUE 引入jquery的方法和配置

第049個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下&#xff0c;本專欄提供行之有效的源代碼示例和信息點介紹&#xff0c;做到靈活運用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安裝、引用&#xff0c;模板使…

springboot基礎(80):redis geospatial的應用

文章目錄 前言redis geospatial如何從地圖上獲取經緯度springboot 的相關方法調用準備redis服務器引用的依賴預設位置的keyGEOADD 添加位置GEORADIUS 獲取指定經緯度附件的停車場&#xff08;deprecated&#xff09;GEORADIUS 獲取指定成員附件的停車場&#xff08;deprecated&…

文心一言API(高級版)使用

文心一言API高級版使用 一、百度文心一言API(高級版)二、使用步驟1、接口2、請求參數3、請求參數示例4、接口 返回示例 三、 如何獲取appKey和uid1、申請appKey:2、獲取appKey和uid 四、重要說明 一、百度文心一言API(高級版) 基于百度文心一言語言大模型的智能文本對話AI機器…

歸并排序--分治法

代碼 #include<iostream> using namespace std;void merge(int arr[], int p, int q, int r, int temp[]) {int i p;int j q 1;int k 0;while (i < q && j < r){if (arr[i] < arr[j]){temp[k] arr[i];}else{temp[k] arr[j];}}while (i < q){t…

智能優化算法應用:基于蟻獅算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于蟻獅算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于蟻獅算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.蟻獅算法4.實驗參數設定5.算法結果6.參考文獻7.MA…

ptmalloc:從內存虛擬化說起

前言 本文并不局限于ptmalloc的原理&#xff0c;而是從linux的內存虛擬化和系統調用原理出發&#xff0c;結合各種語言實現&#xff0c;講明內存分配方面的trade off&#xff0c;力圖事無巨細&#xff0c;追根究底。本文內容包括但不限于&#xff1a;NIO原理、0拷貝原理、內存…

Redis 數據的持久化 RDB、AOF、RDB + AOF、No persistence 各自優缺點

文章目錄 一、RDB (Redis Database)1.1 RDB 優勢1.2 RDB 缺點1.3 RDB 如何工作1.4 RDB配置1.5 開啟/關閉&#xff0c;RDB快照策略&#xff0c;save指令1.6 持久化硬盤文件&#xff0c;dbfilename指令1.7 持久化硬盤文件的存儲地址&#xff0c;dir指令 二、AOF (Append Only Fil…

leetcode:643. 子數組最大平均數 I(滑動窗口)

一、題目 鏈接&#xff1a;643. 子數組最大平均數 I - 力扣&#xff08;LeetCode&#xff09; 函數原型&#xff1a; double findMaxAverage(int* nums, int numsSize, int k) 二、思路 滑動窗口&#xff1a; 先計算數組前k個元素總和&#xff0c;作為第一個窗口&#xff0c;默…

vlog如何降低重復率

大家好&#xff0c;今天來聊聊vlog如何降低重復率&#xff0c;希望能給大家提供一點參考。 以下是針對論文重復率高的情況&#xff0c;提供一些修改建議和技巧&#xff1a; vlog如何降低重復率 Vlog作為一種流行的視頻日志形式&#xff0c;常常被人們用于記錄日常生活、分享經…

pta模擬題——7-34 刮刮彩票

“刮刮彩票”是一款網絡游戲里面的一個小游戲。如圖所示&#xff1a; 每次游戲玩家會拿到一張彩票&#xff0c;上面會有 9 個數字&#xff0c;分別為數字 1 到數字 9&#xff0c;數字各不重復&#xff0c;并以 33 的“九宮格”形式排布在彩票上。 在游戲開始時能看見一個位置上…

Lambda表達式規則,用法

Lambda表達式是JDK8新增的一種語法格式 1.作用 簡化匿名內部類的代碼寫法 Lambad用法前提&#xff1a;只能簡化函數式接口&#xff08;一般加有Funcationallnterface&#xff09;&#xff08;有且僅有一個抽象方法&#xff09;的匿名內部類 匿名內部類&#xff1a;(本質是對…

url轉pdf或者html轉pdf工具 — iText實現url轉pdf

url轉pdf或者html轉pdf工具 — iText實現url轉pdf 參考資料&#xff1a; https://kb.itextpdf.com/itext/can-i-generate-a-pdf-from-a-url-instead-of-from-a- http://www.micmiu.com/opensource/expdoc/itext-pdf-demo/ https://blog.51cto.com/u_16237557/7263784 iText&…

sensitive-word 敏感詞/臟詞開源工具-v.0.10.0-臟詞分類標簽支持

sensitive-word sensitive-word 基于 DFA 算法實現的高性能敏感詞工具。 創作目的 實現一款好用敏感詞工具。 基于 DFA 算法實現&#xff0c;目前敏感詞庫內容收錄 6W&#xff08;源文件 18W&#xff0c;經過一次刪減&#xff09;。 后期將進行持續優化和補充敏感詞庫&…