読者です 読者をやめる 読者になる 読者になる

u16suzuの blog

u16suzu のブログです。

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

ruby

一番シンプルな例. forkしてみる.

th = Thread.fork do
    p 33
end

th.join

マルチスレッドで出力

def multi_thread
    threads = [1, 2, 3, 4].map do |e|
        Thread.fork(e) do |i|
            p i
        end
    end

    threads.each {|th| th.join}
end

multi_thread

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