Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ractorが出たからRubyの並列処理をおさらいする
Search
mokichi
February 24, 2021
Programming
0
810
Ractorが出たからRubyの並列処理をおさらいする
mokichi
February 24, 2021
Tweet
Share
More Decks by mokichi
See All by mokichi
Elixir以外の言語もよく使うエンジニアが考える、Phoenix LiveViewの使いどころ
mokichi
2
520
Rubyistから見たElixir
mokichi
1
490
動的画像変換サービス「imagepix」のご紹介
mokichi
1
290
Phoenix LiveViewをプロダクション利用してみた所感
mokichi
3
990
Phoenix1.6で標準搭載されたLiveViewに入門してみよう
mokichi
0
260
WebエンジニアのためのKubernetesサクッと入門
mokichi
1
190
未来予知できない凡人の生存戦略
mokichi
0
94
Other Decks in Programming
See All in Programming
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
250
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
450
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.2k
SourceGeneratorのマーカー属性問題について
htkym
0
210
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
130
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
150
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
410
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
290
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
490
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
290
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
130
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Skip the Path - Find Your Career Trail
mkilby
1
87
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Design in an AI World
tapps
0
180
Making Projects Easy
brettharned
120
6.6k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
180
Scaling GitHub
holman
464
140k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Raft: Consensus for Rubyists
vanstee
141
7.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
Ractorが出たから Rubyの並列処理をおさらいする 2021/02/24 @第28回ゆるはち.it 株式会社スマートアルゴリズム 齋藤 和也
自己紹介 名前:齋藤 和也 HN:mokichi 年齢:33歳 居住:東京都 出身:福岡県 🍜 Twitter:@mokichi_s12m 株式会社スマートアルゴリズム 代表取締役 株式会社Vook
外部CTO クラウドインフラを含むサーバサイド開発やDevOps が得意 ここ数年は Elixir/Phoenix にお熱 🔥 (ビルディット社との付き合いは結構長い )
Ruby3.0で Ractor が追加されました 🎉 まだ experimental
Ractorとは • アクターモデル風の並行・並列制御機構 • 並列実行単位をRactorと呼んでいる Ractor.new{ expr } • メッセージの送受信でRactor間のコミュニケーション
• 各Ractorに少なくとも1つのスレッドがある • コントリビューター曰く「らくたー」と読むのが正しそうです (当初あーるあくたーと読んでいたのは内緒) https://www.youtube.com/watch?v=40t8EPpnujg
プロセスやスレッドじゃダメなの? 🤔
プロセスの問題点 • OSへの負荷がスレッドと比較して高い • メモリをたくさん使う (COWがあったとしても) • プロセス間でメモリ上のオブジェクトを直接共有する ことができず、別の手段でやりとりする必要がある
スレッドの問題点 • スレッド間でメモリを共有するため、複数スレッドから同じオブ ジェクトを同時に操作するとまずいことに (Mutex等使えば解消できるが、かなり気を使う) • 処理どうしに依存関係があると複雑さが増す • CRubyにはGIL(GVL)があるためスレッド安全ではあるが、マ ルチコアを活用できない
GILについて • Global Interpreter Lock の略 RubyではGVL(Giant VM Lock)という名称 •
同時に実行されるスレッドは常に1つ • I/Oの待機時には解放される ◦ WebアプリケーションのようにI/Oが処理の大部分を占めるものは マルチスレッドによる並列化の恩恵を受けられる
人類には マルチスレッドプログラミングは 難しすぎる 🤯 C++やJavaでは結構やってましたが… (お察し)
Ractorの特徴 • 異なるRactorではGILの影響を受けない • ミュータブルな変数をRactor間で共有できない ◦ ディープコピーを渡す or 所有権を移動させる •
別Ractorからのメッセージを待つことができるため、 依存関係がある処理やワーカープールを記述しやすい ◦ スレッドで同じことしようとすると、ロックが複雑に絡み合う
時間があればサンプルを少し見る
将来Ractorはこう使われる?(勝手な想像です) • Unicorn/Puma や Resque/Sidekiq の発展型 ◦ GILの影響を受けないことによる恩恵を受けられる • 機械学習
(データ収集 > 前処理 > 学習 > 予測 の全工程) ◦ Ruby自体も処理速度が向上しているし、ライブラリも結構あるみたい ◦ RubyでWebアプリ作ってるのに、そこだけわざわざPython使うのは… • 分散コンピューティング ◦ PubSubとうまく使えば別マシンのプロセスと連動できたり?
We ❤ Ruby!