Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

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# 线程是如何工作的? Thread t=新线程(WriteY); t、 Start(); 对于(inti=0;i_C#_Multithreading - Fatal编程技术网

C# 线程是如何工作的? Thread t=新线程(WriteY); t、 Start(); 对于(inti=0;i

C# 线程是如何工作的? Thread t=新线程(WriteY); t、 Start(); 对于(inti=0;i,c#,multithreading,C#,Multithreading,线程是如何工作的?这意味着为什么每次运行时上述代码的输出都不固定,“x”和“y”的顺序不同?所有多任务系统都有一个调度器。调度器决定下一步将执行的工作单元。一个基本的调度器可以是运行高分辨率计时器的东西(比如说,每100毫秒,就会发生一次任务切换)。显然,现代实现要比这复杂得多 也就是说,大多数现代线程实现都依赖于内核中的调度器。这些调度器中有许多是不确定的。也就是说,不能保证上下文切换(即调度程序管理的可运行实例之间的切换)将在任何特定时间发生 您看到的是您的系统的调度程序之间的差异。所有多任

线程是如何工作的?这意味着为什么每次运行时上述代码的输出都不固定,“x”和“y”的顺序不同?

所有多任务系统都有一个调度器。调度器决定下一步将执行的工作单元。一个基本的调度器可以是运行高分辨率计时器的东西(比如说,每100毫秒,就会发生一次任务切换)。显然,现代实现要比这复杂得多

也就是说,大多数现代线程实现都依赖于内核中的调度器。这些调度器中有许多是不确定的。也就是说,不能保证上下文切换(即调度程序管理的可运行实例之间的切换)将在任何特定时间发生


您看到的是您的系统的调度程序之间的差异。

所有多任务系统都有一个调度程序。调度器决定下一步将执行的工作单元。一个基本的调度器可以是运行高分辨率计时器的东西(比如说,每100毫秒,就会发生一次任务切换)。显然,现代实现要比这复杂得多

也就是说,大多数现代线程实现都依赖于内核中的调度器。这些调度器中有许多是不确定的。也就是说,不能保证上下文切换(即调度程序管理的可运行实例之间的切换)将在任何特定时间发生


您看到的是您系统的调度程序中存在的差异。

谢谢您的回答,我想知道调度程序,它是操作系统中的一个新概念吗?如果是,那么它是如何与操作系统内核通信的。调度程序是内核的一部分。它决定了在哪个CPU上运行哪个线程或进程(如果有多个CPU),以及在挂起每个线程或进程并切换到另一个线程或进程之前给每个线程或进程多少时间。@Jeevan:Will是对的;现代的实现要比这复杂得多。有关各种调度技术的概述,请参阅。感谢您的回答,我是否想了解调度程序,它是操作系统中的一个新概念?如果是,那么它是如何与操作系统内核通信的。调度程序是内核的一部分。它决定了在哪个CPU上运行哪个线程或进程(如果有多个CPU),以及在挂起每个线程或进程并切换到另一个线程或进程之前给每个线程或进程多少时间。@Jeevan:Will是对的;现代的实现要比这复杂得多。有关各种调度技术的概述,请参阅。
Thread t = new Thread (WriteY);
t.Start();            
for (int i = 0; i < 1000; i++) Console.Write ("x");

static void WriteY()
{
    for (int i = 0; i < 1000; i++) Console.Write ("y");
}