我不明白爲什麼線程必須「睡眠」,如果應用程序運行循環中沒有事件。這是否節省能量,或記憶,還是其他?爲什麼如果沒有事件發生,主運行循環會將執行線程置於睡眠狀態?
當談到在從源輸入的事件,那麼它會再次喚醒線程來處理這個事件。之後,它會再次入睡,因爲隊列中沒有更多事件正在等待處理。
有人對這個睡眠問題有很好的解釋嗎?
我不明白爲什麼線程必須「睡眠」,如果應用程序運行循環中沒有事件。這是否節省能量,或記憶,還是其他?爲什麼如果沒有事件發生,主運行循環會將執行線程置於睡眠狀態?
當談到在從源輸入的事件,那麼它會再次喚醒線程來處理這個事件。之後,它會再次入睡,因爲隊列中沒有更多事件正在等待處理。
有人對這個睡眠問題有很好的解釋嗎?
這不是問題。這是一件好事。主線程還會做什麼?它不應該處理長時間運行的任務 - 這會在用戶界面事件進入時降低用戶界面的「快感」。
在事件進入之前它不應該是緊縮循環 - 這會佔用處理器時間,否則可能會被其他應用程序明智地使用。
睡覺(或者說等待),這正是你想要它做的 - 因此它能夠儘快醒來,因爲它有一些有用的工作要做,但在其他方面不影響系統。
甲休眠線程允許OS調度來運行其它線程(其分配CPU時間來線程子系統)。
正如其他人說,把線程睡眠允許執行其它線程。
我會補充一點,因爲您可能指的是iPhone(基於大多數其他問題),即使沒有其他線程需要運行,CPU功耗也會在閒置時下降。