# Spawn workers to consume items from the iterator's enumerator based on the current concurrency level.
def spawn_workers
EM.next_tick(start_worker = proc{
if @workers < @concurrency and !@ended
# p [:spawning_worker, :workers=, @workers, :concurrency=, @concurrency, :ended=, @ended]
@workers += 1
@process_next.call
EM.next_tick(start_worker)
end
})
nil
end
我从 EM-sychrony#fiberd_interator 使用的 EM interator 中读取了这部分代码。
我对Eventmachin有一些基本的想法,但是我对next_tick的这种递归用法不是很清楚,有人能给我解释一下吗?
在我看来,它就像一个循环,由 EM 处理,而不是“while”或“for”。我对吗?为什么会这样?