C# 线程池-创建10个phreads?

C# 线程池-创建10个phreads?,c#,multithreading,threadpool,C#,Multithreading,Threadpool,我正在创建一个处理大量待处理数据的应用程序。我想在C#中使用线程,只是为了使其进程更快。请参阅下面的示例代码 private static void MyProcess(Object someData) { //Do some data processing } static void Main(string[] args) { for (int task = 1; task < 10; task++) { Thr

我正在创建一个处理大量待处理数据的应用程序。我想在C#中使用线程,只是为了使其进程更快。请参阅下面的示例代码

private static void MyProcess(Object someData)
{      
     //Do some data processing       
}

static void Main(string[] args)
{
     for (int task = 1; task < 10; task++)
     {
         ThreadPool.QueueUserWorkItem(new WaitCallback(MyProcess), task);
     }
}
私有静态void MyProcess(对象someData)
{      
//做一些数据处理
}
静态void Main(字符串[]参数)
{
对于(int task=1;task<10;task++)
{
QueueUserWorkItem(新的WaitCallback(MyProcess),任务);
}
}

这是否意味着将任务传递给“MyProcess”方法的每个循环都将创建一个新线程(总共10个线程)?另外,线程是否将同时处理?

线程池将启动的线程数取决于多个因素,请参阅

基本上,您在这里需要10个工作项,这些工作项可能会立即启动线程

线程最有可能并发运行,这取决于机器和处理器的数量


如果启动了大量工作项,它们将在队列中结束,并在线程可用时立即开始运行。

调用将在线程池中安排。它不保证将创建10个线程,也不保证所有10个任务将同时执行。线程池中的线程数取决于硬件,并自动选择以提供最佳性能

本文很好地解释了它的工作原理:

  • 此Stackoverflow问题解释了ThreadPool和Thread之间的区别:

    您的方法将排队9次(从1开始,而不是0)执行,并将在thredpool线程可用时执行。

    为什么不在Visual Studio中调试时查看您的线程窗口?因为这是您的
    主方法(因此进程刚刚启动),是的,线程是新创建的(线程池)“缓存”这些线程,以备以后再次使用)。如果您有10个cpu内核,它们可能会并发运行。
    Parallel.For(1,10,task=>{…})