10. Share Memory Space!
Lightweight!
May Have Memory
Management Issues!
Can Sometimes Take
Advantage of Multiple
CPUs
Thread Process
Separate Memory Space!
Requires More Memory!
No Multithreading
Issues!
Can Take Advantage of
Multiple CPUs
25. Fibonacci
fib = Fiber.new do
f1 = f2 = 1
loop do
Fiber.yield f1
f1, f2 = f2, f1 + f2
end
end
!
5.times { p fib.resume }
$ ruby fiber_fib.rb
1
1
2
3
5
26. Fiber Ticker
require 'fiber'
!
fb1 = Fiber.new do
puts "[Fiber 1] Started"
sleep 2
puts "[Fiber 1] Completed"
end
!
fb2 = Fiber.new do
5.times do |n|
puts "[Fiber 2] tick #{n}"
end
end
!
fb1.resume
fb2.resume
27. Fiber Ticker
require 'fiber'
!
fb1 = Fiber.new do
puts "[Fiber 1] Started"
sleep 2
puts "[Fiber 1] Completed"
end
!
fb2 = Fiber.new do
5.times do |n|
puts "[Fiber 2] tick #{n}"
end
end
!
fb1.resume
fb2.resume
$ ruby fiber_tick.rb
[Fiber 1] Started
[Fiber 1] Completed
[Fiber 2] tick 0
[Fiber 2] tick 1
[Fiber 2] tick 2
[Fiber 2] tick 3
[Fiber 2] tick 4
http://schmurfy.github.io/2011/09/25/on_fibers_and_threads.html