作者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
1F:→ visor:其实可以用注解的 05/17 09:43
2F:→ oaz:个人觉得写成函数名较好, 因为不可能每次写 sleep 都注解 05/17 17:11
3F:→ oaz:再说, 注解可以写在函式里 05/17 17:11
4F:→ sofss:这东西常用在performance critical的地方,多一层不见得好... 05/23 23:49