ruby の ractor を試してみた


概要

ruby 3.0 で導入された ractor を試してみました。気軽に並列処理を書くための仕組みらしいです。

注意点

ruby 3.1 では ractor はまだ実験的機能です。

benchmark

1 秒かかる task を 5 回繰り返し、結果を取得するサンプルコードです。

ractor を使った場合は 1 秒、使わなかった場合は 5 秒かかっています。

require 'benchmark'

Warning[:experimental] = false

def task
  sleep 1

  'result'
end


def r = Ractor.new { task }

Benchmark.bm do |x|
  x.report { 5.times.map { r }.each(&:take) }
  x.report { 5.times.each { task } }
end

# 結果
#     user     system      total        real
# 0.003882   0.000000   0.003882 (  1.003568)
# 0.000615   0.000000   0.000615 (  5.006763)

感想

まだ実験段階の機能らしいので実践投入は難しそうなのと、それ以外にも ractor を使った場合の制約やメモリの話など使いこなすのは難しそうでした。

とは言え使ってみること自体は簡単そうなので、何かスクリプトあたりから試してみたいと思います。