并发与并行
Thread 多线程、Fiber 纤程、Ractor(GIL)、async gem
并发与并行
Ruby 有 GIL(全局解释器锁)——多线程不能并行执行 Ruby 代码。但 IO 操作会释放 GIL。Ractor(Ruby 3.0+)提供真正的并行。
学完本章你将: 掌握 Thread、Fiber、Ractor。
Thread
ruby
threads = []
3.times do |i|
threads << Thread.new do
sleep rand
puts "线程 #{i} 完成"
end
end
threads.each(&:join) # 等待所有线程
puts "全部完成"
Fiber —— 轻量级协程
ruby
fiber = Fiber.new do
Fiber.yield 1
Fiber.yield 2
3
end
puts fiber.resume # 1
puts fiber.resume # 2
puts fiber.resume # 3
# puts fiber.resume # FiberError——已结束
Ractor(Ruby 3.0+ 真并行)
ruby
# Ractor 绕过 GIL——真正的并行执行
ractor = Ractor.new do
sleep 1
42
end
puts ractor.take # 42(阻塞等待)