我的Ruby应用程序处理每个需要大约10秒钟才能执行的作业。每个工作都花费大量时间等待IO。我有定时器,使用简单的Time.now比较来记录作业的每个阶段需要多长时间:
def timer
t = Time.now
yield
(Time.now - t).seconds
end
timer do
# IO
end
=> 1.342
最初,我按顺序处理了所有作业,这很好,只是机器在50%的时间内处于空闲状态(由于IO)。
我转而使用多线程模型来收回一些IO时间。现在我为每个作业生成一个新线程,最多可同时生成10个线程。这很好用,除了当一个线程在运行一个定时器块时被抢占时,计时器在线程处于休眠状态时保持“运行”,导致计时器返回一个人工膨胀的数字。
我需要的是找出计时器块的实际运行时间的方法,忽略睡眠时间。有没有办法实现这一点,比如问Thread.current它花了多少时间运行?