1. 程式人生 > >不一樣的角度一窺多執行緒

不一樣的角度一窺多執行緒

不一樣的角度一窺多執行緒

最近在效能除錯時,發現了一個有趣的現象,我把程式碼簡化後如下.

    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.

對於這個問題,舉個例子,大家就好理解了.
錢不是萬能的,但沒錢是萬萬不能的,所以錢是一個家庭的重中之重,家裡老婆呢為了這個家的長治久安,掌握家裡的財政大權,把家裡的小金庫守得死死的,但這就意味著我沒錢花了嗎?當然不是,和老婆大人用正當理由申請不就完事了?