Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net应用程序多线程_C#_Multithreading - Fatal编程技术网

C# .net应用程序多线程

C# .net应用程序多线程,c#,multithreading,C#,Multithreading,我有一个多核cpu,但我编写的.net应用程序只使用其中一个核。当该选项可用时,如何使其使用多个内核。这不是免费的。使用多个内核需要使用多个线程。为了同时使用多个内核,您必须显式地向程序添加线程支持 这是一篇很好的文章,探讨了如何使用任务并行库(也称为任务库)利用托管代码的多核 您可以尝试JaredPar提到的,或者自己创建程序的多线程版本 我想在这里添加一个更具体的示例,说明从现有程序转换“for循环”以使用并行扩展中的System.Threading.Parallel是多么容易。对于检查0到

我有一个多核cpu,但我编写的.net应用程序只使用其中一个核。当该选项可用时,如何使其使用多个内核。

这不是免费的。使用多个内核需要使用多个线程。为了同时使用多个内核,您必须显式地向程序添加线程支持

这是一篇很好的文章,探讨了如何使用任务并行库(也称为任务库)利用托管代码的多核

您可以尝试JaredPar提到的,或者自己创建程序的多线程版本

我想在这里添加一个更具体的示例,说明从现有程序转换“for循环”以使用并行扩展中的System.Threading.Parallel是多么容易。对于检查0到
maxnum
之间的每个素数的For循环:

System.Threading.Parallel.For(0, maxNum + 1, x => IsPrime(x));  
很简单,不是吗

我还对System.Parallel带来的性能改进进行了简单的基准测试。我希望同学们不介意我在博客上发链接

@JaredPar给出了一个。不过,在某些情况下,我们可能不值得将代码重写为多线程。多线程代码更为复杂,并添加了大量其他类型的bug

然而,在桌面应用程序的简单情况下,有时值得让双核机器的第二个内核免费使用,以便操作系统可以使用它来做一些事情,如为其他应用程序重新绘制屏幕、运行病毒扫描程序等


这不是你特别想听到的答案,但在某些情况下,这是一个务实的答案。

将时间密集型作业分配给多个线程

多线程的建议方法是使用线程池

MSDN中的线程池示例:

using System;
using System.Threading;
public class Example {
    public static void Main() {

        // Queue the task.
        ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));

        Thread.Sleep(1000);

        Console.WriteLine("Main thread exits.");
    }

    // This thread procedure performs the task. 
    static void ThreadProc(Object stateInfo) {

        // No state object was passed to QueueUserWorkItem, so  
        // stateInfo is null.
        Console.WriteLine("Hello from the thread pool.");
    }
}