作者bzan (Oops!)
看板Soft_Job
标题Re: [闲聊] 大家工作上看过哪些夸张的 CODE ?
时间Sun May 16 10:09:10 2010
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
1F:→ yauhh:问题应该不在有没有sleep,而是sleep多久. 05/16 10:28
2F:推 Ting1024:sleep(1) 没错, 一来不卡,二来可以事件发生後立即接手 05/16 14:43
3F:→ Ting1024:如果写Sleep(0) 那就更漂亮了 05/16 14:43
4F:→ coronach:大家好像都不看推文就回文了 Orz............ 05/16 23:57