浏览 2295 次
锁定老帖子 主题:ruby 中线程问题探讨
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-27
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下可以,是这样的吗? 希望资深者解释一二。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-31
不是sleep的问题
gets或者t.exit造成的问题 建议改成 gets #t.exit puts "exiting" t.join 看看 即,注释t.exit,并补充t.join |
|
返回顶楼 | |
发表时间: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... |
|
返回顶楼 | |
发表时间:2008-03-31
很少见到人用ruby的thread.
ruby不是用的os thread,而是自己管理的'green' thread.这种办法在写库函数的非常麻烦,所有可能阻塞的地方都要自己做检查,看是否需要context switch。如果哪处遗漏了就是deadlock. |
|
返回顶楼 | |