假設有一個8核心16執行緒的cpu
1.cpu的多核多核心,在計算的時候是以一個核心2個執行緒計算,還是直接16個執行緒計算?
2.如果是1個核心2個執行緒,那么想要發揮多執行緒優勢只需要再開啟一個執行緒?這樣的話是不是多執行緒的cpu有點雞肋?需要再開啟一個行程才能發揮其他核心的執行緒?所以這個假設我覺得是不對的,需要大佬指條明路?
3.如果實際上計算的從來都是執行緒而不是核心,如果16個執行緒一起執行,那么是不是理論上想要發揮多執行緒優勢只需要再開啟15個執行緒?這樣的話就始終可以利用16個執行緒了?我就算再開啟一個執行緒,那么它還是要等待一個空余的cpu執行緒



uj5u.com熱心網友回復:
不解釋,繞來繞去。你只想說cpu并行我們也不想解釋,自己百度“ C# Paralle”“C# 執行緒池 執行緒排程”,windows不是你說開執行緒就開執行緒的,他自己排程,別繞來繞去,難道你說開1w個執行緒,我們要高5000kcpu跑?
uj5u.com熱心網友回復:
執行緒如何運行是系統的事情,不是你的事情你要做的是告訴系統,我需要安排一個任務,大概需要按什么規則分配(盡快安排/我不急我可以緩緩),優先級多高,使用什么調度器去調度,這就行了。
其他的事情讓系統給你安排,畢竟你是寫應用程式的,不是寫作業系統的
uj5u.com熱心網友回復:
多核多執行緒,在計算的時候,應該是只有一個執行緒在計算,它同一時間只能處理一個計算,只不過計算機速度太快,它會A計算處理三毫秒,B計算處理三毫秒,輪轉時間是不確定的,好像還有個叫輪轉時間片段。那么想要發揮多執行緒優勢只需要再開啟一個執行緒? 多執行緒的優勢是并發,是同一時間干倆件事,這樣會快一點,會比單執行緒快一點,但是并不是越多越好,因為執行緒在切換的時候好像有消耗,效率并不是1+1=2
uj5u.com熱心網友回復:
就算是2核,你開100個執行緒都沒事。這是兩個概念uj5u.com熱心網友回復:
如果是1000w的用戶的請求并發執行下來效率為1000w/1w,沒有多執行緒的時間為1000秒,開了多執行緒之后1秒我覺得確實值,我想問的是能不能同時執行16個執行緒,不是問調度,我自己也知道開1000w個執行緒cpu16個執行緒在1秒內無數次執行,到底是哪個核心哪個執行緒去計算是作業系統調度的,可是這和是否能在同一最小時間單位并行執行16個執行緒不是一個概念
uj5u.com熱心網友回復:
這是并發和并行的概念問題。樓主去百度一下看看,
我感覺你需要知道的是并行。
#1 已經指路了,就不贅述了“C# Paralle”
uj5u.com熱心網友回復:
如果是一個雙核雙執行緒的cpu,你的說法沒有任何問題,可是我如果是雙核4執行緒呢?還是2個核心的cpu被作業系統1秒內無數次的調度執行,一次只執行一下嘛?那這個4執行緒有什么用啊,跟2執行緒沒區別
uj5u.com熱心網友回復:
你要非認為,cpu是必須把一個執行緒執行完了,才做下一個我們也沒辦法解釋。
畢竟現實情況是windows就是一個多任務搶占系統,你把先決條件都否了,還能聊下去么
話說按你的想法,100核都不夠你用的,自己想把 1+2+3給我加1000000000000去,然后開101個執行緒去計算上面的東西,一個核就干那執行緒別的不干,請問第101個怎么辦。
現在問題又來了,我想發個中止運算指令,優先級比上面101都高,你的想法是什么,一次干完?那這個優先級最高的中止指令給誰?在加掛一個核么?
uj5u.com熱心網友回復:
就算是2核,你開100個執行緒都沒事。這是兩個概念
如果是一個雙核雙執行緒的cpu,你的說法沒有任何問題,可是我如果是雙核4執行緒呢?還是2個核心的cpu被作業系統1秒內無數次的調度執行,一次只執行一下嘛?那這個4執行緒有什么用啊,跟2執行緒沒區別
話說,俺們建個廁所,2個坑比4個坑要高效把,如果你要非那么說4個坑和2個坑木區別,我們一樣沒話說
uj5u.com熱心網友回復:
我知道調度,別跟我說調度,我就像16核并行ok,調度這個詞本身的含義是什么啊,不就是什么時間讓什么人做什么事。那還糾結啥啊
系統調度-----------什么時間片讓那個cpu,那個核,去執行那個執行緒背景關系
都是系統級別的事情,跟你沒關系,只是windows系統是從單核,單cpu年代出的,IBM改架構也沒通知微軟,微軟只能一個版本一個版本慢慢適配
uj5u.com熱心網友回復:
參考一下書本內容“在多核處理器之前的時代,單執行緒應用程式在一個更快的處理器上運行,速度就能變得更快。但在多核處理器時代,就不能再這樣簡單地想問題了。”uj5u.com熱心網友回復:
空間下,增加了用于多執行緒協同uj5u.com熱心網友回復:
8個核心指的是有8個cpu單元組件,這8個單元組件集中在一塊芯片上組成完整的cup芯片組。一個cup單元組件可以在邏輯上又分成兩個cpu單元,這就是cpu單核雙執行緒。這就像你的硬碟邏輯上分成幾個區是一個道理,雖然是同一塊硬碟,但是每個磁區在邏輯上是相對獨立的,都可以單獨讀寫。cpu執行緒也一樣,每個核的兩個執行緒在邏輯上也完全獨立。
以8核16執行緒cpu為例,cpu在處理資料的時候,是作業系統根據外部程式的計算需求來統進行一分配的,16個執行緒具有同等的分配幾率。當外部的計算需求只需要一個cpu執行緒就可以搞定時,作業系統隨機分配一個cpu執行緒進行處理。當外部的計算需求比較大,比如你同時開了16個應用程式,假設每個應用程式都是單執行緒,那么理論上說cpu就會把這些應用程式分配給16執行緒去執行。這樣執行的效率就會很高。使用者的用戶體驗就會好。這個我們稱之為程式的并行。如果是單核單執行緒cpu,cpu在處理16個程式的計算請求的時候是按照一定的競爭機制由作業系統來分配時間片的。比如如果時間片的最小單位是1秒,那么第一秒處理16個程式中的某一個的計算請求,第二秒又處理16個程式中的某一個的計算請求。理論上來說,每一秒cpu處理哪個程式的請求都是隨機的。不過,作業系統會在cpu正式處理之前先生成一個操作序列,cpu按照這個序列順序執行。假設在一個16秒周期內cpu對16個程式是絕對的公平,那么單核單執行緒cpu每16秒只對一個應用程式處理的計算需求處理一秒。而8核16執行緒的cpu理論上可以處理16秒。當然,實際上的時間片比一秒小的多,以至于當我們的計算需求很小的時候,你根本感覺不出cpu多核多執行緒的用途所在。但是,當你玩大型網游或者在運行一些影像處理軟體或者建模軟體的時候,這種差別就體現出來了,因為這些程式對于計算需求是很高的,不僅計算的資料量大,計算的頻次也高。單核,雙核cpu在處理這些資料的時候壓力就會比較大,在用戶端的表現就是游戲畫面很卡,游戲會有延時,圖片處理渲染的時候會需要很久。而多核多執行緒的cpu處理起來就會高效很多。
不知道解釋了這些多,有沒有解除你的疑惑



uj5u.com熱心網友回復:
cpu并不是完成同一個執行緒之后才回去完成下一個執行緒。而是完成其中一個片段之后,就把執行緒丟會執行緒佇列里面去。然后接著執行下一個執行緒的任務(這樣的好處可以讓一些耗時任務不長時間占用,比如我要去讀取檔案,cpu的速度是大于記憶體,而記憶體又是大于硬碟的,那么cpu大多數時間是空閑的)。在執行緒佇列里面的執行緒,一般上是平級(每個執行緒被cpu執行的概率相同),也可以讓某一個執行緒優先級提高。以上是單核的情況,多核的情況相當于多個cpu去提取執行緒佇列的任務。而我們在程式中所謂的開啟一個執行緒,實際上就是在執行緒佇列里面添加一個執行緒而已。
uj5u.com熱心網友回復:
執行緒至少包含以下3個重要內容:1.一組通用暫存器的值
2.將要執行的下一條指令的地址
3.堆疊
個人覺得對執行緒的調度所做的事情不能簡化為某個核在作業。
uj5u.com熱心網友回復:
8個核心指的是有8個cpu單元組件,這8個單元組件集中在一塊芯片上組成完整的cup芯片組。一個cup單元組件可以在邏輯上又分成兩個cpu單元,這就是cpu單核雙執行緒。這就像你的硬碟邏輯上分成幾個區是一個道理,雖然是同一塊硬碟,但是每個磁區在邏輯上是相對獨立的,都可以單獨讀寫。cpu執行緒也一樣,每個核的兩個執行緒在邏輯上也完全獨立。
以8核16執行緒cpu為例,cpu在處理資料的時候,是作業系統根據外部程式的計算需求來統進行一分配的,16個執行緒具有同等的分配幾率。當外部的計算需求只需要一個cpu執行緒就可以搞定時,作業系統隨機分配一個cpu執行緒進行處理。當外部的計算需求比較大,比如你同時開了16個應用程式,假設每個應用程式都是單執行緒,那么理論上說cpu就會把這些應用程式分配給16執行緒去執行。這樣執行的效率就會很高。使用者的用戶體驗就會好。這個我們稱之為程式的并行。如果是單核單執行緒cpu,cpu在處理16個程式的計算請求的時候是按照一定的競爭機制由作業系統來分配時間片的。比如如果時間片的最小單位是1秒,那么第一秒處理16個程式中的某一個的計算請求,第二秒又處理16個程式中的某一個的計算請求。理論上來說,每一秒cpu處理哪個程式的請求都是隨機的。不過,作業系統會在cpu正式處理之前先生成一個操作序列,cpu按照這個序列順序執行。假設在一個16秒周期內cpu對16個程式是絕對的公平,那么單核單執行緒cpu每16秒只對一個應用程式處理的計算需求處理一秒。而8核16執行緒的cpu理論上可以處理16秒。當然,實際上的時間片比一秒小的多,以至于當我們的計算需求很小的時候,你根本感覺不出cpu多核多執行緒的用途所在。但是,當你玩大型網游或者在運行一些影像處理軟體或者建模軟體的時候,這種差別就體現出來了,因為這些程式對于計算需求是很高的,不僅計算的資料量大,計算的頻次也高。單核,雙核cpu在處理這些資料的時候壓力就會比較大,在用戶端的表現就是游戲畫面很卡,游戲會有延時,圖片處理渲染的時候會需要很久。而多核多執行緒的cpu處理起來就會高效很多。
不知道解釋了這些多,有沒有解除你的疑惑???
uj5u.com熱心網友回復:
不解釋,繞來繞去。你只想說cpu并uj5u.com熱心網友回復:
把握一個原則,多個執行緒之間是并行處理,單個執行緒是串行處理。uj5u.com熱心網友回復:
CPU 的執行緒和計算機系統里面的執行緒是兩個概念。自從 CPU 有了超執行緒這個技術之后,執行緒數是這個 CPU 有多少個邏輯上的核心。8核16執行緒的 CPU,它物理上是8個核心,但邏輯上是16個核心,在作業系統里面看,它就是16個 CPU 核心。
作業系統的執行緒可以看作一個作業單元,它和 CPU 的執行緒是完全沒有關系的。一個單核心的 CPU 也支持作業系統的多執行緒作業,他是靠CPU的時間分片來實作的。
uj5u.com熱心網友回復:
樓上已經有很多人回答了,在回答都是假的有人說了,指令佇列結構體,那是指令快取,誰分配啊。作業系統分配,作業系統調度
多核誰分配啊---------北橋芯片組分配
intel修改結構同時也修改了指令集的,所以微軟給你們做了Paralle以適應新架構的指令集
所以結帖把,這都不是你們操心的事情。除非你打算自己寫作業系統,自己給下面發多核指令,否則這都是系統和硬體分配。
計算機原理啊,同志們
uj5u.com熱心網友回復:
簡單的說你一個100斤的知識分子,我是一個200斤的運動員,你扛一個麻袋我能扛倆。同理假設一個核心2.4G,處理一個1G的CPU滿負荷能力的執行緒能同時應付兩個。所以8個核心對這種任務能處理16個執行緒。實際情況并不這么簡單,是一個很復雜的指令集的應用uj5u.com熱心網友回復:
執行緒是作業系統級別的概念,而當今的編程已經到了 Task 程度了,不要把思維和知識僅僅停留在低級的執行緒概念上。Task 比執行緒輕多了,是應用系統框架層管理的。例如一個4核運行環境也許最恰當地時候只有1000個執行緒,但是有上百萬個異步并發Task也很輕松很“舒服”。所以要學會Task編程。不要過度糾結Thread編程。
uj5u.com熱心網友回復:
學到了 謝謝樓主轉載請註明出處,本文鏈接:https://www.uj5u.com/net/44643.html
標籤:C#
