Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ractorが出たからRubyの並列処理をおさらいする
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mokichi
February 24, 2021
Programming
880
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ractorが出たからRubyの並列処理をおさらいする
mokichi
February 24, 2021
More Decks by mokichi
See All by mokichi
Elixir以外の言語もよく使うエンジニアが考える、Phoenix LiveViewの使いどころ
mokichi
2
680
Rubyistから見たElixir
mokichi
1
550
Phoenix LiveViewをプロダクション利用してみた所感
mokichi
3
1k
Phoenix1.6で標準搭載されたLiveViewに入門してみよう
mokichi
0
300
WebエンジニアのためのKubernetesサクッと入門
mokichi
1
230
未来予知できない凡人の生存戦略
mokichi
0
130
Other Decks in Programming
See All in Programming
ChromeでローカルLLM
ryu1013
0
190
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.6k
AmebaブログはKMPから卒業します
kmars0605
0
320
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
180
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
340
Groovy as a human and AI friendly programming language
paulk
0
180
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.5k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.2k
Crash Auto Pipelines
veronikapj
1
350
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
610
Kotlinの15年とServer-Side Kotlin
n_takehata
1
190
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
760
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
450
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
Prompt Engineering for Job Search
mfonobong
0
570
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Visualization
eitanlees
153
17k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
We Are The Robots
honzajavorek
0
430
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
500
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
560
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
520
What's in a price? How to price your products and services
michaelherold
247
13k
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!