主頁 > .NET開發 > 想請問下關于多執行緒的問題

想請問下關于多執行緒的問題

2020-09-15 08:24:01 .NET開發

假設有一個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熱心網友回復:

參考 1 樓 wanghui0380 的回復:
不解釋,繞來繞去。你只想說cpu并行

我們也不想解釋,自己百度“ C# Paralle”“C# 執行緒池 執行緒排程”,windows不是你說開執行緒就開執行緒的,他自己排程,別繞來繞去,難道你說開1w個執行緒,我們要高5000kcpu跑?

如果是1000w的用戶的請求并發執行下來效率為1000w/1w,沒有多執行緒的時間為1000秒,開了多執行緒之后1秒我覺得確實值,我想問的是能不能同時執行16個執行緒,不是問調度,我自己也知道開1000w個執行緒cpu16個執行緒在1秒內無數次執行,到底是哪個核心哪個執行緒去計算是作業系統調度的,可是這和是否能在同一最小時間單位并行執行16個執行緒不是一個概念

uj5u.com熱心網友回復:

這是并發和并行的概念問題。
樓主去百度一下看看,
我感覺你需要知道的是并行。
#1 已經指路了,就不贅述了“C# Paralle”

uj5u.com熱心網友回復:

參考 4 樓 Bridge_go 的回復:
就算是2核,你開100個執行緒都沒事。這是兩個概念

如果是一個雙核雙執行緒的cpu,你的說法沒有任何問題,可是我如果是雙核4執行緒呢?還是2個核心的cpu被作業系統1秒內無數次的調度執行,一次只執行一下嘛?那這個4執行緒有什么用啊,跟2執行緒沒區別

uj5u.com熱心網友回復:

參考 7 樓 LikeWatchStar 的回復:
Quote: 參考 4 樓 Bridge_go 的回復:

就算是2核,你開100個執行緒都沒事。這是兩個概念

如果是一個雙核雙執行緒的cpu,你的說法沒有任何問題,可是我如果是雙核4執行緒呢?還是2個核心的cpu被作業系統1秒內無數次的調度執行,一次只執行一下嘛?那這個4執行緒有什么用啊,跟2執行緒沒區別


你要非認為,cpu是必須把一個執行緒執行完了,才做下一個我們也沒辦法解釋。
畢竟現實情況是windows就是一個多任務搶占系統,你把先決條件都否了,還能聊下去么

話說按你的想法,100核都不夠你用的,自己想把 1+2+3給我加1000000000000去,然后開101個執行緒去計算上面的東西,一個核就干那執行緒別的不干,請問第101個怎么辦。

現在問題又來了,我想發個中止運算指令,優先級比上面101都高,你的想法是什么,一次干完?那這個優先級最高的中止指令給誰?在加掛一個核么?

uj5u.com熱心網友回復:

參考 7 樓 LikeWatchStar 的回復:
Quote: 參考 4 樓 Bridge_go 的回復:

就算是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#

上一篇:求助,asp注冊驗證用戶是否存在怎么做啊

下一篇:從VB.NET匯出excel,同樣代碼,為何兩臺電腦運行速度相差巨大?

標籤雲
其他(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)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more