generated at
スレッド




スレッドとプロセスって以前からふわっとしか理解してないんだよなmrsekut
もっとプログラムのレベルでカチッと理解したいんだが


プロセス内で実行される軽量な処理単位
同じプロセス内の他のスレッドとメモリ空間を共有する
スレッド間の通信はプロセス内で行われるため、効率的である
CPU利用の単位
1コアが1度に処理できる単位が1スレッドっってこと #??

メモリ空間を共有しつつ、複数の制御の流れを実現
プロセス内の実行単位
OSのプロセススケジューラがスケジューリングできる最小の実行単位
比較的生成コストが低い
生成時に主記憶やプログラム状態語の確保を必要としない
スタック領域のみを新規に作成すればいい
通信コストが低い
同じメモリ空間なので、コストなしでアクセス可
メモリ空間を共有しているのでデータの破壊があり得る
排他制御をする。アクセス時はロックをかける
スレッドの生成にはシステムコールが必要
CPU命令数にするとかなりの数
1スレッド生成することでスタック領域として数Mバイトを割り当てる
でかい
1000スレッドなら1GB
プロセス内でのみ生成される #??
1プロセスの中で複数のスレッドを生成する
そのプロセスが管理している以下のものなどが各スレッドで共有される
主記憶




シングルコア、シングルスレッドの例
_
[CPUコア] | v [スレッド1]
1つのコアが1つのスレッドを実行する。
シングルコア、マルチスレッドの例
_
[CPUコア] | v [スレッド1] -> [スレッド2] -> [スレッド1] -> [スレッド2] (コンテキストスイッチを繰り返す)
1つのコアが複数のスレッドを順次実行する。
マルチコア、マルチスレッドの例
_
[CPUコア1] [CPUコア2] | | v v [スレッド1] [スレッド2]
2つのコアがそれぞれ別々のスレッドを同時に実行する