0

可能重复:
Ruby 睡眠或延迟不到一秒?

我有 100-1000 个线程正在运行(或更多)。这些线程中的每一个都应该在完全相同的时刻(尽可能准确)执行特定的方法。

我能想到的唯一解决方案是让每个线程为某个时间戳的差异而休眠,但是sleep()并不那么准确。我也在考虑使用EventMachineand EventMachine::Timer,但是这似乎更不可靠和准确。

你会使用什么技术来达到最好的效果?

4

1 回答 1

5

很多人不知道它sleep需要一个浮点值:

Suspends the current thread for duration seconds (which may be
any number, including a Float with fractional seconds). Returns the actual
number of seconds slept (rounded), which may be less than that asked for if
another thread calls Thread#run. Called without an argument, sleep() will
sleep forever.

  Time.new    #=> 2008-03-08 19:56:19 +0900
  sleep 1.2   #=> 1
  Time.new    #=> 2008-03-08 19:56:20 +0900
  sleep 1.9   #=> 2
  Time.new    #=> 2008-03-08 19:56:22 +0900

不能保证延迟是准确的:

3.times do 
  t1 = Time.now.to_f
  sleep 0.5
  t2 = Time.now.to_f
  puts t2 - t1
end

结果是:

0.501162052154541
0.5010881423950195
0.5001001358032227

运行的其他任务可能会使这种偏差更大。

于 2012-10-27T18:12:46.833 回答