前兩天跟一個同窗討論他的一個線程設計問題。
這個線程設計大概是這樣的:「若是一段時間內沒有工做,好比20秒內沒有請求,才讓線程進入idle狀態(wait),其它時候線程處於活躍狀態」。
這樣設計是有問題的。
由於在這個狀況裏線程在工做狀態的時候也不是100%滿負荷的,而是間隙性的處理一個一個工做,因此在線程處理一個工做後就應該讓他進入wait狀態,下一個工做來了再進入活躍狀態,而不是讓線程處於一段活躍時間。
不然會形成線程空跑,佔有cpu太高,帶來性能和功耗問題。在多核cpu上也是同樣,會佔住某個核心。
這樣的狀況用top -H -m 10就能夠看到這個線程一直處在前邊。
這裏涉及到操做系統一些知識,非cs等相關專業出身的同窗一開始從事開發工做可能會遇到,尤爲是作一些比較底層的原始設計的時候,上層的開發高級語言或者平臺sdk會提供一些相關機制好比handler,looperthread等等,這些也是很好的學習範例在作原始設計的時候。oop
畫了個圖說明講解。
作線程不要太自私,佔住全部cpu時間,cpu很忙它要照顧多個線程。性能