google 工程師Jeff Dean 首先在他關於分佈式系統的ppt文檔列出來的,處處被引用的不少。緩存
1秒=10^3毫秒=10^6微妙=10^9納秒=10^12皮秒網絡
讀 cache ns 級,讀內存100 ns,從內存順序讀1MB 250,000ns,從磁盤讀一MB30ms分佈式
Numbers Everyone Should Know線程
L1 cache reference 讀取CPU的一級緩存 | 0.5 ns |
Branch mispredict(轉移、分支預測) | 5 ns |
L2 cache reference 讀取CPU的二級緩存 | 7 ns |
Mutex lock/unlock 互斥鎖\解鎖 | 100 ns |
Main memory reference 讀取內存數據??? | 100 ns |
Compress 1K bytes with Zippy 1k字節壓縮 | 10,000 ns |
Send 2K bytes over 1 Gbps network 在1Gbps的網絡上發送2k字節 | 20,000 ns |
Read 1 MB sequentially from memory 從內存順序讀取1MB | 250,000 ns【0.25ms】 |
Round trip within same datacenter 從一個數據中心往返一次,ping一下 | 500,000 ns 【0.5ms】 |
Disk seek 磁盤搜索 | 10,000,000 ns 【10ms】 |
Read 1 MB sequentially from network 從網絡上順序讀取1兆的數據 | 10,000,000 ns 【10ms】 |
Read 1 MB sequentially from disk 從磁盤裏面讀出1MB | 30,000,000 ns 【30ms】 |
Send packet CA->Netherlands->CA 一個包的一次遠程訪問 | 150,000,000 ns【150ms】 |
從小到大: 進程
CPU的時鐘頻率:CPU運算時的工做的頻率(1秒內發生的同步脈衝數)的簡稱。單位是Hz。 ip
CPU週期:讀取一個指令節所需的時間內存
指令週期:讀取並執行完一個指令所需的時間資源
CPU時間片:CPU分給每一個進程的時間文檔
在Linux上CPU調度的最小單位時間片單位爲5ms-800ms。
Linux調度器實際是識別task_struct進行調度。 不管進程線程,底層都對應一個task_struct,進程和線程的區別是共享資源的多少,兩個進程間徹底不共享資源,兩個線程間共享全部資源。