作者oaz (台灣獨立建國不必錢嗎?)
看板Soft_Job
標題Re: [閒聊] 大家工作上看過哪些誇張的 CODE ?
時間Mon May 17 01:40:30 2010
就我所知, sleep(0) 確實是有特殊意義的
不過,我一直覺得,應該寫成類似
void returnControlBackToOS()
{
Thread.sleep(0);
}
public void run(){
while(!progress.isVisible()){
returnControlBackToOS();
}
/* .............*/
}
※ 引述《bzan (Oops!)》之銘言:
: huh.. 看來這段 code 的原作才是專業哦
: 有興趣的可以寫一個小程式,這個小程式跑兩個 thread
: 主 thread 在營幕上列印訊息,另外一個副 thread 則跑類似下面的 code
: 你會發現副 thread 有加 sleep 和沒加 sleep 出來的結果可能會不一樣
: 沒加 sleep 的可能會佔掉大部份 CPU 資源,導致主 thread 沒什麼機會執行
: 有加 sleep 則比較可能如預期的,主 thread 不斷列印訊息
: 這是因為如果副 thread 只是單純的做 while() 且中間都是 CPU 運算的 code,
: 沒什麼 I/O 控制相關的呼叫,對系統來說反而是 CPU-intensive, 會佔掉大部
: 份的 CPU 資源,進而導致其它 thread 沒機會執行
: 而一般 sleep 函式的設計,除了 delay 外,還會讓出 CPU 控制權給 OS 去做
: context-switching 到其它 thread
: 我記得好像 Windows 95 時代還是什麼時候的事了...
: 寫一個只做 while(1); 的程式可以佔掉整個系統 99% 的資源而讓系統當機...
: 當然這出來的行為一部份也跟 OS 的設計也有關
: ※ 引述《Ting1024 (無)》之銘言:
: : 這不好笑阿,,,, sleep(0) or sleep(1)
: : 基本上都只是暫時要把控制權給別的程式而已,
: : 這樣寫有什麼好笑?
: : 在window 下面 sleep(0) 約是 15ms, 控制權交出去
: : 再跑回來, context switch 時間大約就是這樣...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.46
→ visor:其實可以用註解的 05/17 09:43
→ oaz:個人覺得寫成函數名較好, 因為不可能每次寫 sleep 都註解 05/17 17:11
→ oaz:再說, 註解可以寫在函式裡 05/17 17:11
→ sofss:這東西常用在performance critical的地方,多一層不見得好... 05/23 23:49