一個CPU同一時刻只能執行一個線程;CPU 經過給每一個線程分配必定的時間片,時間片很是短,一般是幾十毫秒,來不停的切換線程執行任務,達到了多線程的效果。當線程用完本身的時間片後,及時任務尚未完成,操做系統也會剝奪它的執行權,讓另外一條線程執行。算法
當一條線程的時間片用完後,操做系統會暫停該線程,並保存該線程相應的信息(到程序計數器),而後再隨機選擇一條新線程去執行,這個過程稱爲「上下文切換」。因爲進行上下文切換時,須要保存當前線程的狀態,並加載線程先前的狀態,這是有消耗的,所以應該儘可能減小上下文切換的次數。數據庫
當一個線程永遠地持有一個鎖,而且其餘線程都嘗試得到這個鎖,那麼它們將被永遠阻塞。在線程A持有鎖L1並想得到鎖L2的同時,線程B持有鎖L2並想得到L1,那麼這兩個線程將永遠等待下去,也就是產生了死鎖。編程
避免死鎖的幾個常見方法:多線程
lock.tryLock(timeout)
來替代使用內部鎖機制。資源限制是指在進行併發編程時,程序的執行速度受限於計算機的硬件資源或者軟件資源,這些計算機資源限制了程序的併發度。併發
線程多了致使線程的上下文切換增多,資源有限,會產生損耗。操作系統
解決資源限制的方法:.net