主頁 > 移動端開發 > CPU時間片是行程還是執行緒的可調度單元?

CPU時間片是行程還是執行緒的可調度單元?

2022-05-30 16:26:14 移動端開發

我想澄清一下“可調度的 CPU 時間片單元”是“行程”還是“執行緒”(內核管理執行緒)我所說的“CPU時間片的可調度單位”是指作業系統的CPU調度程式分配CPU時間片的單位。

根據維基百科中的“短期調度”,行程用于指代可調度單元。

“這個調度程式可以是搶占式的,這意味著當它決定將 CPU 分配給另一個行程時,它能夠強制從 CPU中洗掉行程

另外,根據維基百科中的“時間片”,

“調度程式在每個時間片運行一次,以選擇下一個要運行的行程。”

此外,根據維基百科中的“執行緒”,

行程是資源的單位,執行緒調度和執行的單位”

根據微軟檔案中的“行程和執行緒”,

執行緒是作業系統分配處理器時間的基本單位。”

根據“執行緒調度是由 CPU、內核還是兩者都完成? ”在 quora 中,

“CPU(硬體)只是執行指令。CPU 本身沒有執行緒或調度的概念,盡管 CPU 中可能有支持它們的功能。

“作業系統內核(一組指令,又稱軟體)在 CPU(硬體)上執行。作業系統內核中的調度演算法選擇下一個要執行的執行緒,并指示 CPU 開始執行下一條指令選擇的執行緒“。

uj5u.com熱心網友回復:

澄清:我對“CPU時間片的可調度單元”的理解是“可以在給定CPU時間片內調度的單元”(因為如果“可調度單元”是一個時間,那么這個問題對我來說沒有多大意義)。

基于此,簡而言之,給定邏輯內核的“一個可調度的 CPU 時間片單元”可以看作是一個軟體執行緒(更具體地說,它的執行背景關系由暫存器和行程資訊組成)。


作業系統調度程式對任務進行操作。任務可以是執行緒、行程或其他不尋常的結構(例如資料流)。

現代主流作業系統主要在處理單元上調度執行緒(通常是硬體執行緒,也稱為邏輯內核)。您可以在Microsoft 檔案中獲得有關 Windows 調度程式如何作業的更多資訊該檔案明確指出:

執行緒是行程中可以調度執行的物體

在 Linux 上,默認調度程式CFS任務(即task_struct資料結構)進行操作。任務可以是一個執行緒、一組執行緒或一個行程。這樣做是為了使調度程式更通用,也因為這個調度程式是很久以前設計的,當時處理器只有一個核心,人們專注于行程而不是執行緒。此后的多核時代導致應用程式使用大量執行緒以便使用可用內核。因此,如今,通常是實際安排的 AFAIK 執行緒。這在著名的研究論文The Linux Scheduler: a Decade of Wasted Cores中有解釋(也解釋了 CFS 如何在目標處理器上運行)。

請注意,術語“行程”有時可以指執行緒,因為執行緒有時被稱為“輕量級行程”,而基本行程有時被稱為“重型行程”。行程甚至可以是重型和輕量級行程(即執行緒和實際行程)的通用術語。這是一個非常令人困惑的術語和對語言的誤用(例如有時用于核心的術語“處理器”)。實際上,這在特定背景關系中通常不是問題,因為執行緒和行程可以互換使用(在這種情況下,人們應該使用像“任務”這樣的通用術語)。

至于“一個可調度的 CPU 時間片單元”,這就有點復雜了。一個簡單而天真的答案是:一個執行緒(它絕對不是單獨的行程)。話雖如此,執行緒是一個軟體定義的概念(如行程)。它基本上是一個堆疊、幾個暫存器和一個父行程(可能帶有一些元資訊和一個 TLS 空間)。CPU 不直接對這種資料結構進行操作。例如,CPU 沒有執行緒堆疊的概念(它只是虛擬行程記憶體的一部分)。他們只需要一個由暫存器和行程配置組成的執行背景關系(在保護模式下))。為簡單起見,我們可以說它們執行執行緒。主流的現代 x86 處理器非常復雜,每個內核往往能夠同時運行多個執行緒。這稱為同時多執行緒(也稱為英特爾處理器的超執行緒)。x86 物理內核通常由兩個邏輯執行緒(即硬體執行緒)組成,每個邏輯執行緒都可以執行一個軟體執行緒。

uj5u.com熱心網友回復:

我認為您的誤解實際上是對英語單詞在這種情況下的含義的誤解。

時間片是一段時間也許它只是一秒鐘的一小部分。也許幾秒鐘。

執行緒和行程是計算機將要執行的有效任務。(我在這里進行了簡化。任務的概念具有多種含義,即使在 IT 環境中也是如此。在現代作業系統上,行程實際上是共享相同虛擬記憶體地址空間的執行緒的集合。)

CPU 1或處理器是運行(本機)執行緒的硬體。典型的計算機將具有多個 CPU。但是,計算機中的每個 CPU一次只能運行一個執行緒

因此,作業系統需要調度它所知道的每個執行緒在特定 CPU 上運行。執行此操作的作業系統部分稱為調度程式

如果要運行的執行緒多于運行它們的 CPU,則調度程式通常會將執行緒調度到 CPU 一段固定的時間;時間片當執行緒的時間片已經過去時,調度器會將其掛起并將其放回佇列中,然后調度不同的執行緒在 CPU 上運行。

比喻是我們正在“分割” CPU 上的可用計算時間,并在需要它的執行緒之間共享這些片。

1 - 對于“CPU”的實際含義存在一些分歧。我認為它指的是通常所說的“核心”。英特爾令人困惑地引入了營銷術語2 “超執行緒”,它指的是“核心”的物理硬體可以作為兩個獨立的指令執行器運行的功能。但是,在超執行緒模式下,作業系統調度程式通常會將超執行緒視為不同的內核,因此這與您的問題無關。
2 - 超執行緒背后的實際概念可以追溯到 1960 年代,甚至在英特爾作為一家公司存在之前;https://en.wikipedia.org/wiki/Barrel_processor


所以你的問題的答案:

我想澄清“CPU時間片的可調度單元”是“行程”還是“執行緒”(內核管理執行緒)。

時間片是 CPU 時間的可調度單位。

時間片既不是行程也不是執行緒。事實上,這甚至沒有意義,因為“行程”和“執行緒”不是時間。


我同意@Solomon Slow 的評論。維基百科不具有權威性。但真正的問題是,隨著時間的推移,不同的頁面是由不同的人撰寫和編輯的,而且他們經常使用不一致的 IT 術語。

我的建議是找到并閱讀一本關于(現代)作業系統設計和架構的好教科書。一本寫得很好的教科書在術語的使用上應該是自洽的。

uj5u.com熱心網友回復:

時間片是一個時間單位,例如在使用 HZ=100 構建的傳統 Linux 內核中為 10 毫秒(每秒 100 個定時器中斷)。在一個任務在一個 CPU 內核上運行了這么長時間之后,內核重新獲得對該 CPU 的控制權并呼叫schedule()來決定這個 CPU 內核接下來應該運行什么任務;它已經在運行的任務,或不同的任務。

如果外部中斷到來,調度程式也可以提前運行,尤其是在當前時間片快結束時:如果現在有更高優先級的任務正在等待 CPU,例如在等待 I/O 之后或sleep()系統呼叫結束之后,作業系統將其調度到這個核心上是有意義的,而不是完成任何 CPU 系結任務被中斷的時間片。


對于調度程式必須從中挑選的東西,任務是一個有用的詞。沒有暗示行程中的單獨行程或執行緒,也沒有為內核任務(如不是執行緒或行程的 Linux 中斷處理程式“下半部分”)留出空間。

行程的每個執行緒都需要單獨調度以在 CPU 內核上執行(如果它沒有被阻塞)。

您發現的有關調度行程的文章使用了每個行程都是單執行緒的簡化假設。

或者他們假設一個 1:n 執行緒模型,其中作業系統只知道整個行程的一個任務,并且多執行緒是在用戶空間中完成的,“綠色執行緒”而不是本機執行緒。如今,大多數主流作業系統都使用 1:1 執行緒模型,其中每個 C 或 Java 執行緒都是作業系統可見的單獨可調度任務,盡管在您有多個作業系統調度任務的情況下也可以使用 n:m 模型,但不如你有高級語言執行緒。

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/482584.html

標籤:多线程 过程 操作系统 cpu架构 调度

上一篇:物理內核越多,多執行緒C 代碼越慢?(執行緒化C mex函式)

下一篇:在執行緒中標記未來物件

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more