嗨,我正在阅读有关线程和IIS的文章。并告知每个请求都由cpu上的线程执行。每个逻辑处理器可以有一个线程。所以我尝试了。我的计算机上有4个逻辑处理器,我运行的控制台应用程序使用此代码创建了4个任务。
Task raskRun1 = new Task(() => run1());
raskRun1.Start();
Task raskRun2 = new Task(() => run2());
raskRun2.Start();
Task raskRun3 = new Task(() => run3());
raskRun3.Start();
Task raskRun4 = new Task(() => run4());
raskRun4.Start();
每个人都有这个实现。
public static void run1()
{
for (int i = 0; i < 500; i++)
{
Console.WriteLine("1" + i.ToString());
Thread.Sleep(1000);
}
}
运行该应用程序时,我期望的是。我无法加载区域设置Web应用程序。但它正在加载。
我知道我的想法是错误的,但是请您对此情况稍作解释?
答案 0 :(得分:1)
每个逻辑处理器可以在任何特定时刻运行一个线程,但是可以通过为每个逻辑处理器分配时间片来同时运行多个线程。
多任务操作系统将可用处理器时间分配给需要它的进程或线程。该系统设计用于抢先式多任务处理;它为执行的每个线程分配处理器时间片。当前执行的线程在其时间片过去时将被挂起,从而允许另一个线程运行。当系统从一个线程切换到另一个线程时,它将保存抢占线程的上下文,并在队列中还原下一个线程的已保存上下文。
时间片的长度取决于操作系统和处理器。由于每个时间片都很小(大约20毫秒),因此多个线程似乎正在同时执行。