不一样的角度一窥多线程
不一样的角度一窥多线程
最近在性能调试时,发现了一个有趣的现象,我把代码简化后如下.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start...");
DoSomething();
Console.WriteLine("Ending...");
Console.ReadLine();
}
static void DoSomething()
{
var sum="";
for (int i = 2; i < int.MaxValue; i++)
{
sum += "s";
}
Console.WriteLine(sum.Length);
}
}
可以看到,非常简单的一段代码,当我用Windows的性能监测工具来监测每个处理器的使用率时,发现了一个有趣的现象.
我电脑是四核的I7处理器,执行以上代码后,却只有处理器2一直处理一个比较高的占用率,而其他的三个则处于一个”摸鱼混日子”的状态,处理器1则更过分,你是睡着了吗?
同一台电脑上的处理器,难道大家不是有福同享,有难同当的吗? 为什么其他几个处理器就忍心看着处理器2水深火热呢?
然后,我就和这个问题死磕上了,恶补了一些操作系统与多线程的知识,现在把一写知识点串起来,分享给大家.
分级保护域
电脑操作系统提供不同的资源访问级别。在计算机体系结构中,Rings是由两个或更多的特权态组成。在一些硬件或者微代码级别上提供不同特权态模式的CPU架构上,保护环通常都是硬件强制的。Rings是从最高特权级(通常被叫作0级)到最低特权级(通常对应最大的数字)排列的。在大多数操作系统中,Ring 0拥有最高特权,并且可以和最多的硬件直接交互(比如CPU,内存)。在Windows中, User Space,也就是我们自己安装的那些应用程序处理Ring 3,而系统内核就在Ring 0.
对于这个问题,举个例子,大家就好理解了.
钱不是万能的,但没钱是万万不能的,所以钱是一个家庭的重中之重,家里老婆呢为了这个家的长治久安,掌握家里的财政大权,把家里的小金库守得死死的,但这就意味着我没钱花了吗?当然不是,和老婆大人用正当理由申请不就完事了?