赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 110
- 在线时间
- 953 小时
- 注册时间
- 2007-4-25
- 帖子
- 805
|
一箭烂YiJL 发表于 2011-4-15 15:05
回复 苏小脉 的帖子
测了一下,sleep 默认参数为 0 这个好像是《Programming Ruby》的文档失误,为 0 时 sleep 应该是立即返回,昨天我是依据这个说的,很明显错了。
但如果没有传递 sleep 参数,那确实是表示永久睡眠,这是各种文档都明确说明的。process.c 中 sleep 的实现也是如此显示:- static VALUE
- rb_f_sleep(int argc, VALUE *argv)
- {
- time_t beg, end;
- beg = time(0);
- if (argc == 0) {
- rb_thread_sleep_forever();
- }
- else if (argc == 1) {
- rb_thread_wait_for(rb_time_interval(argv[0]));
- }
- else {
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
- }
- end = time(0) - beg;
- return INT2FIX(end);
- }
复制代码 当没有参数时调用 rb_thread_sleep_forever。
RM 要么是刻意做了什么手脚,要么就是在嵌入解释器的时候没考虑周全产生了 BUG。
我双核,任务管理器的时候会有两个CPU显示块,用sleep和不用sleep都各有高低,分别相反。
CPU 在执行 Ruby 程序的时候如果得到空闲,自然又跑去执行别的程序了。Ruby 睡眠了线程就相当于自动放弃了当前的时间片。你应该看的是 ruby.exe (或者 Game.exe,如果用的是 RM)这个进程的 CPU 使用率。 |
|