C Ruby的功能';s线程#连接(0)?
因此,我们正在尝试调试我们的应用程序的一个问题,我们认为我们已经将其缩小到线程问题 根据Ruby关于线程的文档,我了解到为join方法提供一个整型参数可以指定在返回nil之前等待线程连接的时间 但是,我不确定传入“0”时会发生什么 我的一位同事,在为Ruby解释器研究了C代码之后,似乎认为它不是“根本不等待,立即加入它,如果它没有回来,则返回nil”,而是更接近于“不必麻烦加入,只需在给定时刻返回线程的快照”C Ruby的功能';s线程#连接(0)?,c,ruby,multithreading,C,Ruby,Multithreading,因此,我们正在尝试调试我们的应用程序的一个问题,我们认为我们已经将其缩小到线程问题 根据Ruby关于线程的文档,我了解到为join方法提供一个整型参数可以指定在返回nil之前等待线程连接的时间 但是,我不确定传入“0”时会发生什么 我的一位同事,在为Ruby解释器研究了C代码之后,似乎认为它不是“根本不等待,立即加入它,如果它没有回来,则返回nil”,而是更接近于“不必麻烦加入,只需在给定时刻返回线程的快照” 有人能给我指一些文档(或者干脆告诉我)把“0”参数传递给join()做什么吗?你的同事
有人能给我指一些文档(或者干脆告诉我)把“0”参数传递给join()做什么吗?你的同事是正确的。请尝试以下代码,例如:
y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0)
并与:
y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0.15)
请参见Diego Basch测试代码后的内容:
def f()
y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0)
end
def g()
y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0.0000000000001)
end
def h()
y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0.15)
end
f
和g
非常相似。
这是因为f只是一个极限——尽可能地放在一个小的数字里。
他们的意思是一样的。立即检查线程是否完成。如果不是,则返回nil
因此,在上面的代码中,直到在前两种情况下重复求值,但在第三种情况下仅求值几次(特别是每0.15秒)。使用0作为参数的功能与其他数字完全相同——检查线程是否在接下来的0秒内完成(现在),以及是否返回nil
恐怕你的同事说的不对。join的文档是我首先要问这个问题的原因。目前还不清楚在传递>0 int还是0 int时是否存在差异(如果有)。您上面的代码似乎表明,将0作为参数传递只是“立即联接”,并且不会像我的同事所建议的那样返回线程(线程对象)的快照。没有差异,否则它会明确地说。