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
40
マルチスレッドプログラム
以下動画のテキストです
https://youtu.be/uxWQTdme1Sg
Satoru Takeuchi
PRO
March 22, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
デバイスにアクセスするデバイスファイル
sat
PRO
1
25
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
17
デバイスドライバ
sat
PRO
0
21
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
60
共有メモリ
sat
PRO
3
53
Linuxのブートプロセス initramfs編
sat
PRO
2
51
Linuxのブートプロセス
sat
PRO
6
160
シェルのジョブ
sat
PRO
1
35
常駐サービスを実現するデーモンプロセス
sat
PRO
0
40
Other Decks in Technology
See All in Technology
社会人力と研究力ー博士号をキャリアの武器にするー
kentaro
2
110
Previewでもここまで追える! Azure AI Foundryで始めるLLMトレース
tomodo_ysys
2
630
ペアーズにおける評価ドリブンな AI Agent 開発のご紹介
fukubaka0825
9
2.5k
雑に疎通確認だけしたい...せや!CloudShell使ったろ!
alchemy1115
0
210
ソフトウェアテスト 最初の一歩 〜テスト設計技法をワークで体験しながら学ぶ〜 #JaSSTTokyo / SoftwareTestingFirstStep
nihonbuson
PRO
1
140
10分で学ぶ、RAGの仕組みと実践
supermarimobros
0
910
Global Azure2025(GitHub Copilot ハンズオン)
tomokusaba
2
720
MCPを理解する
yudai00
14
10k
AOAI で AI アプリを開発する時にまず考えたいこと
mappie_kochi
1
650
Azure × MCP 入門
ry0y4n
8
1.6k
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
1k
Datadog のトライアルを成功に導く技術 / Techniques for a successful Datadog trial
nulabinc
PRO
0
130
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
76
9.4k
Side Projects
sachag
453
42k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.5k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
420
Done Done
chrislema
184
16k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
GitHub's CSS Performance
jonrohan
1031
460k
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