зеркало из https://github.com/github/ruby.git
37 строки
585 B
YAML
37 строки
585 B
YAML
|
prelude: |
|
||
|
def make_link(previous)
|
||
|
Fiber.new do
|
||
|
while message = previous.resume
|
||
|
Fiber.yield(message)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def make_chain(length = 1000, &block)
|
||
|
chain = Fiber.new(&block)
|
||
|
|
||
|
(length - 1).times do
|
||
|
chain = make_link(chain)
|
||
|
end
|
||
|
|
||
|
return chain
|
||
|
end
|
||
|
|
||
|
message = "Hello World!"
|
||
|
|
||
|
chain = make_chain do
|
||
|
while true
|
||
|
Fiber.yield(message)
|
||
|
end
|
||
|
end
|
||
|
benchmark:
|
||
|
make_chain: |
|
||
|
make_chain(100) do
|
||
|
while true
|
||
|
Fiber.yield(message)
|
||
|
end
|
||
|
end
|
||
|
resume_chain: |
|
||
|
chain.resume
|
||
|
loop_count: 5000
|