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