如何启动比我的机器逻辑核心更多的线程? [已关闭]

问题描述 投票:0回答:1

我创建了下面的程序来理解线程。 下面的程序创建了 1000 个线程并创建了运行非常非常长的循环。

for(int i = 0; i < 1000; i++)
{
    var j = i;
    Console.WriteLine("Creating Thread " + j);   
    new Thread(() =>
    {
        Console.WriteLine("Running thread " + j);
        for(var k = 0; k < 1000000000000000000; k++) { }
        Console.WriteLine("Completing thread " + j);
    }).Start();
}

Console.ReadLine();

它向我展示了以下结果并不断增长。当我的机器只有 8 个逻辑核心并且这些核心已经在循环中时,这怎么可能?

Creating Thread 0
Creating Thread 1
Creating Thread 2
Running thread 1
Running thread 0
Creating Thread 3
Creating Thread 4
Running thread 2
Creating Thread 5
Running thread 3
Creating Thread 6
Running thread 4
Running thread 5
Creating Thread 7
Creating Thread 8
Running thread 6
Creating Thread 9
Running thread 8
Running thread 7
Creating Thread 10
Running thread 9
Creating Thread 11
Running thread 10
Running thread 11
Creating Thread 12
Creating Thread 13
Running thread 12
Creating Thread 14
Running thread 13
Creating Thread 15
Running thread 14
Creating Thread 16
Running thread 15
Creating Thread 17
Running thread 16
Creating Thread 18
Running thread 17
Creating Thread 19
Running thread 18
Creating Thread 20
Running thread 19
Creating Thread 21
Running thread 20
Creating Thread 22
c# multithreading asp.net-core .net-core threadpool
1个回答
0
投票

正如Ken所说,这与Windows的工作原理有关。一个核心可以处理许多线程,并且它不会一个接一个地运行线程,系统可以执行上下文切换以给出更多线程正在运行的外观。每个核心可以在多个线程之间快速切换。

这就是您看到它启动这么多线程的原因。

更多关于上下文切换的细节,你可以参考这篇文章

© www.soinside.com 2019 - 2024. All rights reserved.