2008-03-27
ruby 中线程问题探讨
t = Thread.new do
i=0
while true
#sleep 1
puts "printing a line, #{i.to_s}"
i+=1
#sleep 1
end
end
gets
t.exit
puts "exiting"
这个例子来自http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229801
就是在windows下,加上sleep就不会在dow界面上打印 printing a line,即使把sleep去掉,
好像在只能写到80来行就停止了。
其中有人解答说是ruby采用one-click install的将使之io和线程不能工作。而在linux下
和macos下可以,是这样的吗?
希望资深者解释一二。
评论
yawl
2008-03-31
很少见到人用ruby的thread.
ruby不是用的os thread,而是自己管理的'green' thread.这种办法在写库函数的非常麻烦,所有可能阻塞的地方都要自己做检查,看是否需要context switch。如果哪处遗漏了就是deadlock.
ruby不是用的os thread,而是自己管理的'green' thread.这种办法在写库函数的非常麻烦,所有可能阻塞的地方都要自己做检查,看是否需要context switch。如果哪处遗漏了就是deadlock.
blogbin
2008-03-31
又试了另外的例子,即在gets前加入sleep 10
sleep 10
gets
t.exit
puts "exiting"
t.join
可以解决该问题。
我估计gets直接把输出io给block掉了,如果t线程加上sleep 1,造成t线程来不及输出printing a line, #{i.to_s}。
线程main的gets和线程puts都在争夺输出io...
sleep 10
gets
t.exit
puts "exiting"
t.join
可以解决该问题。
我估计gets直接把输出io给block掉了,如果t线程加上sleep 1,造成t线程来不及输出printing a line, #{i.to_s}。
线程main的gets和线程puts都在争夺输出io...
blogbin
2008-03-31
不是sleep的问题
gets或者t.exit造成的问题
建议改成
gets
#t.exit
puts "exiting"
t.join
看看
即,注释t.exit,并补充t.join
gets或者t.exit造成的问题
建议改成
gets
#t.exit
puts "exiting"
t.join
看看
即,注释t.exit,并补充t.join
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 371 次
- 性别:

- 来自: 深圳

- 详细资料
搜索本博客
我的相册
my123
共 1 张
共 1 张
最近加入圈子
最新评论
-
我对ruby应用看法及其他
对我来说,情况不同:我做嵌入式开发,用C和Ruby.我做GUI程序,以前用VB, ...
-- by rubynroll -
用property.js提交表单参 ...
解决,在接收端脚本加个<%@LANGUAGE="VBSCRIPT" COD ...
-- by kenlistian -
ruby 中线程问题探讨
很少见到人用ruby的thread. ruby不是用的os thread,而是 ...
-- by yawl -
ruby 中线程问题探讨
又试了另外的例子,即在gets前加入sleep 10 sleep 10 ge ...
-- by blogbin -
ruby 中线程问题探讨
不是sleep的问题gets或者t.exit造成的问题建议改成 gets # ...
-- by blogbin






评论排行榜