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
79
マルチスレッドプログラム
以下動画のテキストです
https://youtu.be/uxWQTdme1Sg
Satoru Takeuchi
PRO
March 22, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
「Linux」という言葉が指すもの
sat
PRO
4
160
APIとABIの違い
sat
PRO
5
79
ファイルシステムへのアクセス方法
sat
PRO
0
33
ファイルシステム
sat
PRO
1
37
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
6.1k
ポーリングと割り込み
sat
PRO
1
85
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
150
会社員しながら本を書いてきた知見の共有
sat
PRO
3
900
デバイスにアクセスするデバイスファイル
sat
PRO
1
71
Other Decks in Technology
See All in Technology
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
10
4.4k
o11yで育てる、強い内製開発組織
_awache
3
110
Oracle Cloud Infrastructure:2025年9月度サービス・アップデート
oracle4engineer
PRO
0
390
M5製品で作るポン置きセルラー対応カメラ
sayacom
0
140
【新卒研修資料】LLM・生成AI研修 / Large Language Model・Generative AI
brainpadpr
23
16k
自作LLM Native GORM Pluginで実現する AI Agentバックテスト基盤構築
po3rin
2
240
pprof vs runtime/trace (FlightRecorder)
task4233
0
160
「技術負債にならない・間違えない」 権限管理の設計と実装
naro143
36
11k
後進育成のしくじり〜任せるスキルとリーダーシップの両立〜
matsu0228
6
2.2k
BirdCLEF+2025 Noir 5位解法紹介
myso
0
190
それでも私はContextに値を詰めたい | Go Conference 2025 / go conference 2025 fill context
budougumi0617
4
1.2k
非エンジニアのあなたもできる&もうやってる!コンテキストエンジニアリング
findy_eventslides
3
900
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
The Language of Interfaces
destraynor
162
25k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
We Have a Design System, Now What?
morganepeng
53
7.8k
Docker and Python
trallard
46
3.6k
Code Review Best Practice
trishagee
72
19k
Side Projects
sachag
455
43k
Into the Great Unknown - MozCon
thekraken
40
2.1k
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