u16suzuの blog

u16suzu のブログです。

Ruby でマルチスレッドプログラミングなど

Threadを1つ

th = Thread.fork do
    p 33
end

th.join

Threadを複数

count = 3
count.times.map do |i|
  Thread.fork do
    p i
  end
end.each(&:join)

Process

pid = fork do
    p 'Process fork'
end
exitpid, status = *Process.waitpid2(pid)

Fiber

  • Fiber とはThread を軽量化したもの.
f = Fiber.new do
    p "First"
    Fiber.yield # Fiber.yield を呼ぶとコール元に処理が戻る. もう一度Fiber#resumeが呼ばれたときは ここから処理が継続する.
    p "Second"
    Fiber.yield
    p "Third"
    Fiber.yield
    p "4th"
    Fiber.yield
    p "5th"
end

f.resume
f.resume