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
Satoru Takeuchi
PRO
March 22, 2025
Technology
3
70
マルチスレッドプログラム
以下動画のテキストです
https://youtu.be/uxWQTdme1Sg
Satoru Takeuchi
PRO
March 22, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
6k
ポーリングと割り込み
sat
PRO
1
67
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
130
会社員しながら本を書いてきた知見の共有
sat
PRO
3
840
デバイスにアクセスするデバイスファイル
sat
PRO
1
56
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
45
デバイスドライバ
sat
PRO
0
72
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
160
共有メモリ
sat
PRO
3
86
Other Decks in Technology
See All in Technology
リリース2ヶ月で収益化した話
kent_code3
1
170
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
6
220
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
1
290
AIに目を奪われすぎて、周りの困っている人間が見えなくなっていませんか?
cap120
1
430
Perlアプリケーションで トレースを実装するまでの 工夫と苦労話
masayoshi
1
400
人に寄り添うAIエージェントとアーキテクチャ #BetAIDay
layerx
PRO
8
2k
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
5
450
Amazon Q Developerを活用したアーキテクチャのリファクタリング
k1nakayama
2
170
【CEDEC2025】大規模言語モデルを活用したゲーム内会話パートのスクリプト作成支援への取り組み
cygames
PRO
2
770
Kiroから考える AIコーディングツールの潮流
s4yuba
4
650
Tableau API連携の罠!?脱スプシを夢見たはずが、逆に依存を深めた話
cuebic9bic
3
200
【CEDEC2025】現場を理解して実現!ゲーム開発を効率化するWebサービスの開発と、利用促進のための継続的な改善
cygames
PRO
0
720
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Writing Fast Ruby
sferik
628
62k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Faster Mobile Websites
deanohume
308
31k
Documentation Writing (for coders)
carmenintech
73
5k
What's in a price? How to price your products and services
michaelherold
246
12k
How STYLIGHT went responsive
nonsquared
100
5.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
Transcript
マルチスレッドプロセス Mar. 22nd, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はじめに • システムに複数あるCPUコアを有効活用するにはシステム上で複数処理を並列実 行する必要がある ◦ 全く別のことをする処理を複数動かす (e.g. Webブラウザとコンパイラ ) ◦
ある処理を複数に分割して並列実行 (e.g. Webサーバのリクエストを並列で処理 ) • 後者を実現する方法が2つある ◦ マルチプロセス ▪ forkでプロセスを複数生成する ▪ 📝 過去動画 その84 プロセスの生成 fork編 ▪ 📝 過去動画 その86 プロセスの生成 コピーオンライトを使った fork編 ◦ マルチスレッド ▪ pthread_create関数でプロセスを複数生成する ▪ 本動画で説明 2
マルチスレッドスレッド • 1つのプロセス内の実行の流れを複数に分けるというイメージ ◦ スレッド間でページテーブルは共有、つまり全メモリ領域を共有 • あらゆるプロセスは実行開始開始時に1つスレッドが存在する ◦ このスレッドをメインスレッドと呼ぶ •
pthread_create()関数によってサブスレッドを作る ◦ 関数の引数としてサブスレッドに実行させたい関数を指定 3 int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);
おさらい: プロセスの生成 4 プロセスのメモリ 物理メモリ 1) fork()呼び出し プロセスのメモリ(*1) 物理メモリ 2-1)
親プロセスが fork()実行直後から 実行再開 2-2) 子プロセスが fork()実行直後から 実行開始 仮想アドレス空間 仮想アドレス空間 仮想アドレス空間 *1) コピーオンライトによって最初は共有 書き込むと共有解除
スレッドの生成 5 プロセスのメモリ 物理メモリ 1) pthread_create()呼び出し プロセスのメモリ 物理メモリ 2-1) 親スレッドがpthread_create()から
復帰して実行再開 2-2) 子スレッドが pthread_create()で 指定された関数を 実行 仮想アドレス空間 仮想アドレス空間
マルチスレッドプロセスの利点 • 生成時にページテーブルのコピーが不要なため、生成所要時間が短い • ほとんどのリソースをスレッド間で共有するのでリソース消費量が少ない • 全スレッドが同じメモリを読み書きできるので見かけ上協調動作しやすい ◦ 排他制御はもちろん必要 6
マルチスレッドプロセスの欠点 • 1つのスレッドの障害がプロセス全体の障害になりやすい ◦ 例: 1つのスレッドがNULLポインタ参照するとプロセス全体が異常終了する • マルチスレッドプログラミングのお作法を守るのが大変 ◦ 例:
マルチスレッドプログラムから呼び出してはいけない (thread-unsafe)関数がある ◦ 📝 Go言語のgoroutineのように、このようなお作法を意識せずマルチスレッドプログラムできるよう になっていることもある 7
まとめ • あるまとまった処理を並列実行したい場合マルチプロセス、マルチスレッドという方 法がある • どっちも一長一短あるので好きなほうを使えばいい ◦ 📝 どちらにするか選択できたり、両方使う場合もある (e.g.
Apache Webサーバ 8