Re: [閒聊] 大家工作上看過哪些誇張的 CODE ?

看板Soft_Job (軟體人)作者 (Oops!)時間16年前 (2010/05/16 10:09), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串13/31 (看更多)
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 (無)》之銘言: : ※ 引述《coronach (...)》之銘言: : : 看過一種跑起來不會有問題 : : 但是還滿有趣的........ : : public void run(){ : : while(!progress.isVisible()){ : : Thread.sleep(1); : : } : : /* .............*/ : : } : : 大概是覺得很趕時間............. : 這不好笑阿,,,, sleep(0) or sleep(1) : 基本上都只是暫時要把控制權給別的程式而已, : 這樣寫有什麼好笑? : 在window 下面 sleep(0) 約是 15ms, 控制權交出去 : 再跑回來, context switch 時間大約就是這樣... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.155.205

05/16 10:28, , 1F
問題應該不在有沒有sleep,而是sleep多久.
05/16 10:28, 1F

05/16 14:43, , 2F
sleep(1) 沒錯, 一來不卡,二來可以事件發生後立即接手
05/16 14:43, 2F

05/16 14:43, , 3F
如果寫Sleep(0) 那就更漂亮了
05/16 14:43, 3F

05/16 23:57, , 4F
大家好像都不看推文就回文了 Orz............
05/16 23:57, 4F
文章代碼(AID): #1BxrF8qf (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1BxrF8qf (Soft_Job)