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
データ競合と対策
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
まりも
May 16, 2024
Programming
0
17
データ競合と対策
非同期処理を非常に難しいものにしている原因の一つである、データ競合と現在考えられているその対策について解説します。
まりも
May 16, 2024
Tweet
Share
More Decks by まりも
See All by まりも
メンタルモデルから見るオブジェクト設計
hrmstrsmgs
0
250
技術的負債
hrmstrsmgs
0
270
よい設計のプログラムを作るには
hrmstrsmgs
0
88
歴史から理解するJavaScript
hrmstrsmgs
0
75
論理的な考え方
hrmstrsmgs
0
74
論理的な話し合いはなぜ必要か
hrmstrsmgs
0
48
腕のある技術者はなぜ
hrmstrsmgs
0
95
疑似乱数の生成
hrmstrsmgs
0
49
構造化プログラミング
hrmstrsmgs
0
170
Other Decks in Programming
See All in Programming
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
470
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1k
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
170
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
300
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
3
1.1k
Codex の「自走力」を高める
yorifuji
0
1.3k
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
150
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
120
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
120
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
190
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
600
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
290
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
52k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
How to build a perfect <img>
jonoalderson
1
5.3k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.4k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
150
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
86
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Documentation Writing (for coders)
carmenintech
77
5.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
140
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
95
Transcript
データ競合と対策
データ競合 public void 預金額を処理する() { var 移動金額 = 預金額1 /
2; this.預金額2 = this.預金額2 - 移動金額; this.預金額1 = this.預金額1 + 移動金額; }
データ競合 public void Increment() { this.Count++; }
データ競合 public void Add(int i) { list.Add(i); }
対策(LOCK) class 預金口座 { decimal 残高; private Object thisLock =
new Object(); public void 預金を下す(decimal 金額) { lock (thisLock) { if (金額> 残高) { throw new Exception("不足しています"); } 残高 -=金額; } } }
対策(LOCK) データ競合 全ての場合に有効 デッドロックに気を付ける 処理 順次、反復、分岐のすべて 利点 簡単 問題点 ロックをかけた部分は並列処理ができない
アムダールの法則を考えると結構大きな問題なんじゃ? 対応言語 ほぼすべての言語
対策(イミュータブル) class 総額 { const int 残高; public: 総額(const int
残高) :残高(残高) {} const 総額 下す(const int 総額) const; };
対策(イミュータブル) データ競合 そもそも起きない 処理 順次、反復、分岐のすべて 利点 データ競合はおきない 問題点 関数型言語っぽい書き方に直さないといけない 対応言語
関数型言語、C++、C#(8以降?)、 オブジェクト指向言語(イミュータブルになるよう気を付けて書けば可能)
対策(ASYNC/AWAIT) データ競合 データ競合がない場合に利用 行数で全体の8割くらいはデータ競合ないんじゃ? 処理 順次、反復、分岐のすべて 利点 同期プログラムと全く同じ感覚で使える 問題点 データ競合に対応できない
データ競合対策は別に必要 対応言語 C#,Visual Basic,F#,Typescript,Python,Ecmascript(2017)C++(17には入らない?)
対策(PLINQなど) var result = from item in list.AsParallel()
where item < 100 select Sqrt(item);
参考に普通のLINQ var result = from item in list
where item < 100 select Sqrt(item);
対策(PLINQなど) データ競合 リストのデータ一つ一つに対して処理する場合 処理 反復のみ 利点 簡単 問題点 多数データを並列の場合しか使えない 対応言語
C#,Java,Scala
対策(REACTIVE EXTENSIONS) データ競合 リストのデータ一つ一つに対して処理する場合 イベントストリーム 処理 基本的には反復 工夫すれば順次、反復、分岐のすべて 利点 比較的簡単
対応できる処理も多い 問題点 多数データとイベントを非同期で扱うときしか使えない アムダールの法則を考えると結構重要な欠点なんじゃ? 対応言語 C#,Visual Basic,Swift,JavaScript,Java
対策(ACTOR) データ競合 対策済み 処理 順次、反復、分岐のすべて ただし非同期処理は気を付けて扱う必要がある 利点 比較的簡単 問題点 非同期処理をしっかり意識しないと実装できない
対応言語 Erlang,Scala,Elixer,C++,C#
対策(スレッド所有権) データ競合 対策済み Actorより深い対応 処理 非同期処理は気を付けて扱う必要がある Actorと同じ 利点 比較的簡単 Actorの一種
問題点 非同期処理をしっかり意識しないと実装できない 対応言語 Ruby(guild),Pony
対策(STM) データ競合 対策済み 処理 非同期処理は気を付けて扱う必要がある 利点 比較的簡単 割と難しいといううわさも 問題点 非同期処理をしっかり意識しないと実装できない
対応言語 C++、F#