$30 off During Our Annual Pro Sale. View Details »

Ractorが出たからRubyの並列処理をおさらいする

SAITO Kazuya
February 24, 2021

 Ractorが出たからRubyの並列処理をおさらいする

SAITO Kazuya

February 24, 2021
Tweet

More Decks by SAITO Kazuya

Other Decks in Programming

Transcript

  1. Ractorが出たから
    Rubyの並列処理をおさらいする
    2021/02/24 @第28回ゆるはち.it
    株式会社スマートアルゴリズム 齋藤 和也

    View Slide

  2. 自己紹介
    名前:齋藤 和也 HN:mokichi
    年齢:33歳
    居住:東京都 出身:福岡県 🍜
    Twitter:@mokichi_s12m
    株式会社スマートアルゴリズム 代表取締役
    株式会社Vook 外部CTO
    クラウドインフラを含むサーバサイド開発やDevOps
    が得意
    ここ数年は Elixir/Phoenix にお熱 🔥
    (ビルディット社との付き合いは結構長い )

    View Slide

  3. Ruby3.0で Ractor が追加されました 🎉
    まだ experimental

    View Slide

  4. Ractorとは
    ● アクターモデル風の並行・並列制御機構
    ● 並列実行単位をRactorと呼んでいる Ractor.new{ expr }
    ● メッセージの送受信でRactor間のコミュニケーション
    ● 各Ractorに少なくとも1つのスレッドがある
    ● コントリビューター曰く「らくたー」と読むのが正しそうです
    (当初あーるあくたーと読んでいたのは内緒)
    https://www.youtube.com/watch?v=40t8EPpnujg

    View Slide

  5. プロセスやスレッドじゃダメなの? 🤔

    View Slide

  6. プロセスの問題点
    ● OSへの負荷がスレッドと比較して高い
    ● メモリをたくさん使う (COWがあったとしても)
    ● プロセス間でメモリ上のオブジェクトを直接共有する
    ことができず、別の手段でやりとりする必要がある

    View Slide

  7. スレッドの問題点
    ● スレッド間でメモリを共有するため、複数スレッドから同じオブ
    ジェクトを同時に操作するとまずいことに
    (Mutex等使えば解消できるが、かなり気を使う)
    ● 処理どうしに依存関係があると複雑さが増す
    ● CRubyにはGIL(GVL)があるためスレッド安全ではあるが、マ
    ルチコアを活用できない

    View Slide

  8. GILについて
    ● Global Interpreter Lock の略
    RubyではGVL(Giant VM Lock)という名称
    ● 同時に実行されるスレッドは常に1つ
    ● I/Oの待機時には解放される
    ○ WebアプリケーションのようにI/Oが処理の大部分を占めるものは
    マルチスレッドによる並列化の恩恵を受けられる

    View Slide

  9. 人類には
    マルチスレッドプログラミングは
    難しすぎる 🤯
    C++やJavaでは結構やってましたが… (お察し)

    View Slide

  10. Ractorの特徴
    ● 異なるRactorではGILの影響を受けない
    ● ミュータブルな変数をRactor間で共有できない
    ○ ディープコピーを渡す or 所有権を移動させる
    ● 別Ractorからのメッセージを待つことができるため、
    依存関係がある処理やワーカープールを記述しやすい
    ○ スレッドで同じことしようとすると、ロックが複雑に絡み合う

    View Slide

  11. 時間があればサンプルを少し見る

    View Slide

  12. 将来Ractorはこう使われる?(勝手な想像です)
    ● Unicorn/Puma や Resque/Sidekiq の発展型
    ○ GILの影響を受けないことによる恩恵を受けられる
    ● 機械学習 (データ収集 > 前処理 > 学習 > 予測 の全工程)
    ○ Ruby自体も処理速度が向上しているし、ライブラリも結構あるみたい
    ○ RubyでWebアプリ作ってるのに、そこだけわざわざPython使うのは…
    ● 分散コンピューティング
    ○ PubSubとうまく使えば別マシンのプロセスと連動できたり?

    View Slide

  13. We ❤ Ruby!

    View Slide