簡體   English   中英

單個線程應用程序是否僅在一個CPU上運行

[英]Does a single threaded application run on only one CPU

我正在8 CPU機器上開發單線程應用程序,當發生繁重操作時,CPU利用率如下所示:

在此輸入圖像描述

.NET框架是否具有將單個線程(自動)的工作划分為其他CPU的功能?

不能保證任何單個線程總是在同一個核心上運行。 但它保證它只會同時在一個核心運行。 但它可以在一個核心上運行直到上下文切換,並在上下文切換到另一個核心后恢復。 您的線程獲得的每個時間片可以在另一個核心上分配。

單個線程應用程序是否只在一個CPU上運行?

正如其他人所說,不一定。 但是,給定的線程一次只能在一個核心運行。

.net框架是否具有將工作划分為其他CPU的功能?

是。 .NET具有Parallel類和Parallel LINQ 請注意,您必須自己划分工作(分成小塊),然后.NET框架將自動處理多個線程之間的工作。

即使只有一個線程的進程可能也可能不會總是在同一個CPU上運行該一個線程。 當然,該進程的 CPU利用率不能超過單個核心的100%。 但是100%可能會分布在機器上的核心數量上。 因此,您可能會看到兩個不同內核上的利用率為50%,而不是100%僅在一個上,25%在四個不同內核上,等等。

.NET垃圾收集器將在另一個線程上運行,如果您正在執行WinForms / WPF,則GUI將運行,並且操作系統將在其他線程中執行各種工作以幫助您的單線程應用程序更快地運行。

單線程應用程序僅在CPU的一個核心上運行,因此它的工作方式是當你擁有多個CPU時,只需獲得更多內核就可以讓你的pc更強大。 您只在所有CPU上使用一個核心。

我知道這是一個舊線程,但我帶着同樣的問題來到這里,並且有不同的原因/解決方案。

如果您通過Visual Studio調試器(此處為VS2012)啟動程序,則您的線程似乎綁定到單個核心。 為了使用所有可用的核心,我必須直接從可執行文件或從Windows cmd提示符啟動它。

可能非常具體,但希望它有所幫助。

不,它總是在一個處理器/核心中運行,並且可能會根據調度程序而改變。

您也可以使用async和await ,它們將有助於您應用程序的流動性。

你有沒有看過Task ,它是一種創建線程的簡單方法

Task.Run(() =>
{
    // Do something that will take a long time
    Thread.Sleep(10000);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM