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
5 分でやる Rust Concurrency in Action
Search
Ryo Okubo
June 27, 2017
Programming
1
370
5 分でやる Rust Concurrency in Action
RustのLT会! Rust入門者の集い #3 で話した資料です。
https://rust.connpass.com/event/56276/
Ryo Okubo
June 27, 2017
Tweet
Share
More Decks by Ryo Okubo
See All by Ryo Okubo
メルカリ・メルペイの成長を支える データ基盤とはどんなものか
syucream
7
6.2k
バッチとストリーミング、それぞれの障害に立ち向かう
syucream
3
3.2k
How Scala works at Mercari
syucream
2
930
Production-ready stream data pipeline in Merpay, Inc
syucream
2
12k
データとML周辺エンジニアリン グを考える会 #2 イントロ
syucream
0
580
マイクロサービスにおける ログ収集の課題と取り組み
syucream
7
2.4k
Stream Data Pipeline for Microservices in Merpay
syucream
6
1.2k
メルペイにおける、マイクロサービスに寄り添うログ収集基盤 / Microservices-frendly Data Pipeline
syucream
0
17k
Merpay のデータ収集基盤
syucream
5
980
Other Decks in Programming
See All in Programming
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.3k
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
930
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
180
[技育CAMPアカデミア]アイディアを形に!【超入門】スマホアプリ開発〜リリースまでの流れをご紹介
teamlab
PRO
0
380
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
540
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
800
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
270
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
360
Git Rebase
bkuhlmann
11
1.6k
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
270
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
940
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
1
680
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
319
37k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Facilitating Awesome Meetings
lara
42
5.6k
Bash Introduction
62gerente
604
210k
Scaling GitHub
holman
457
140k
Documentation Writing (for coders)
carmenintech
60
3.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Ruby is Unlike a Banana
tanoku
96
10k
Typedesign – Prime Four
hannesfritz
36
2.1k
KATA
mclloyd
15
12k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Thoughts on Productivity
jonyablonski
58
3.8k
Transcript
5 分でやる Rust Concurrency in Ac0on @syu_cream
わたしはだれ • @syu_cream – ウェッブサービスの裏側を支える技術者 – 趣味でmrubyの薄い本やC++のコード書いてます
今日のお話 • Rust でマルチスレッドプログラミングするのって • C++ でやるより楽だよねというはなし • 時間も限られてるし mutex
についてのみ • 題材としてスレッド毎にvectorに要素追加してみる – GitHub に今日話すソースコードあります – h<ps://github.com/syucream/rust_cia
C++ で書く場合(データ競合起こす版) • コンパイルは通る – ただし未定義動作になる
C++ で書く場合 • ロックを取ることでデータ競合を避ける
Rust で書く場合(データ競合起こす版1) • コンパイルが…
Rust で書く場合(データ競合起こす版1) • コンパイルが…通らない! – 複数のスレッドに変数をborrowしようとしてるため
Rust で書く場合(データ競合起こす版2) • じゃあ Arc で参照をcloneしてborrowしよう! • これでコンパイルが…
Rust で書く場合(データ競合起こす版2) • じゃあ Arc で参照をcloneしてborrowしよう! • これでコンパイルが…通らない! – Arc<T> の変数は複数スレッドから変更できない
Rust で書く場合 • Mutex<T> を使う! – lock() でロックを取って変更する
マルチスレッドプログラミングにおける C++ vs Rust • C++ – C++11以降ならthread,mutexが標準で使えて便利 – データ競合についてはプログラマが気をつける必要あり
• Rust – データ競合が起こる場合コンパイル時にエラーになる
Rustでも競合状態は避けきれない • 以下のコードはデッドロックを起こす…
まとめ • Rust でマルチスレッドプログラミングするのって – コンパイル時のチェックが手厚いので • C++ でやるより楽だよねというはなし –
ただし万能なわけではないよ