線程是靠cpu來運行的,cpu要運行一個線程就要占用cpu時間,像Windows這樣的多任務操作系統,可以允許多個線程同時運行,所謂的同時運行并不是真正的同時運行,而是輪流運行不同的線程,因為cpu速度很快,如果線程不是很多,就會給用戶有所有線程在同時運行的錯覺。舉個例子,系統中有10個線程要運行,如果要求在1秒內所有的線程都運行一遍,則每個線程可運行時間為10分之一秒,也就是如果一個線程已經運行了10分之一秒,系統會停止該線程(或稱為掛起該線程),運行下一個線程,當又輪到掛起的線程運行時,系統會從該線程停止的地方運行,這種線程掛起是由系統進行的,即所謂的線程調度。有時候,我們的線程暫時沒有數據處理,我們也可以通過一些API來使自己的線程掛起,當系統檢測到線程被用戶掛起時,就算輪到該線程系統也不會運行該線程,而是直接去運行下一個線程,這種情況下,除非用戶使該線程退出掛起狀態,否則系統不會運行該線程。從這個意義上來講,一個線程掛起將會給其他線程贏得更多的運行時間(或機會),也就節約了CPU的時間資源。
摘自網絡。