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
55
マルチスレッドプログラム
以下動画のテキストです
https://youtu.be/uxWQTdme1Sg
Satoru Takeuchi
PRO
March 22, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Rook: Intro and Deep Dive With Ceph
sat
PRO
0
76
会社員しながら本を書いてきた知見の共有
sat
PRO
3
760
デバイスにアクセスするデバイスファイル
sat
PRO
1
31
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
28
デバイスドライバ
sat
PRO
0
44
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
110
共有メモリ
sat
PRO
3
66
Linuxのブートプロセス initramfs編
sat
PRO
2
75
Linuxのブートプロセス
sat
PRO
6
180
Other Decks in Technology
See All in Technology
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
130
SFTPコンテナからファイルをダウンロードする
dip
0
510
vLLM meetup Tokyo
jpishikawa
1
260
AIにどこまで任せる?実務で使える(かもしれない)AIエージェント設計の考え方
har1101
3
1.2k
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全
opelab
6
1.1k
What's new in OpenShift 4.19
redhatlivestreaming
1
430
「どこにある?」の解決。生成AI(RAG)で効率化するガバメントクラウド運用
toru_kubota
2
460
AIのAIによるAIのための出力評価と改善
chocoyama
0
250
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
510
Amazon Q Developer for GitHubとAmplify Hosting でサクッとデジタル名刺を作ってみた
kmiya84377
0
3.5k
CIでのgolangci-lintの実行を約90%削減した話
kazukihayase
0
320
菸酒生在 LINE Taiwan 的後端雙刀流
line_developers_tw
PRO
0
890
Featured
See All Featured
Speed Design
sergeychernyshev
31
1k
Designing Experiences People Love
moore
142
24k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Embracing the Ebb and Flow
colly
86
4.7k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
480
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Producing Creativity
orderedlist
PRO
346
40k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
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