Z
ZHANK
进阶技巧

并发与并行

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(阻塞等待)