プログラムの実行単位
| ハードウェア・スレッド(論理コア) | 物理的に同時に実行できる命令の流れ、CPUの実行単位のこと。CPU スペックで「8コア16スレッド」となっていれば、同時に16個のプログラムを実行できることを意味する。 |
| プロセス | 実行中のプログラムの入れ物、メモリやスレッドなど資源の管理単位のこと。通常はアプリを1個開くと1プロセスとなる。メモ帳を2個開けば2プロセスとなる。 |
| スレッド | 仮想的に同時に実行できる命令の流れ、CPUの実行単位のこと。プロセスの中に1個存在し、必要に応じて増やして利用できる。スレッドを100個生成すれば100個同時にプログラムを実行できる。 |
| スレッドプール | スレッドのプール(ストック)のこと。スレッドの生成・破棄にはコスト(時間)がかかるため、使い終わったスレッドをプール(ストック)しておき、次回必要なときはプールしたものを再利用して高速化を図っている。 |
| タスク | 仕事の実行単位のこと。スレッドの生成と実行、非同期処理、スレッド間の同期、結果の受け渡しなどが行える。内部でスレッドプールを利用している。 |
マルチプロセス、マルチスレッド 処理
| マルチプロセス処理 (multiprocessing) | 複数のプロセスを使ってプログラムを実行させること。 1つのプロセスのときはシングルプロセス処理。 |
| マルチスレッド処理 (multithreading) | 複数のスレッドを使ってプログラムを実行させること。 1つのスレッドのときはシングルスレッド処理。 |
逐次・並行・並列 処理
| 逐次処理 (sequential processing) | タスク1が完了したら,タスク2に取り掛かる。 タスク 1 → 2 → 3 |
| 並行処理 (concurrent processing) | タスクAとタスクBを交互に進める(ある瞬間では,どちらか一方のみ進行中) タスク A1 → B1 → A2 → B2 → A3 → B3 → … |
| 並列処理 (parallel processing) | タスクAとタスクBを同時に進める。 CPUコア1:タスク A1 → A2 → A3 → … CPUコア2:タスク B1 → B2 → B3 → … |
同期・非同期 処理
| 同期処理 (synchronous processing) | 「同期」とは「タイミングを合わせる」という意味。 何かを依頼した側が、その結果が出るまで次の行動に移らずに待機するスタイルを指す。 |
| 非同期処理 (asynchronous processing) | 「非同期」とは「タイミングを合わせない」という意味。 何かを依頼した後、結果を待たずに自分の作業を続け、後で結果を受け取るスタイルを指す。 |
ブロッキング・ノンブロッキング 処理
| ブロッキング処理 | 関数内部でスレッドがスリープ(一時停止)する処理のこと。 例:fileStream.Read(buffer) … 同期I/O処理。処理結果が返ってくるまで内部でスリープ。 例:task.Wait() … 非同期タスクが終わるまでスリープ。 例:Thread.Sleep(1000) … 指定した時間が経過するまでスリープ。 |
| ノンブロッキング処理 | 関数内部でスレッドがスリープしない処理のこと。 例:sha256.ComputeHash() … CPUのみ利用する処理。 例:fileStream.ReadAsync(buffer) … 非同期I/O処理。 例:await Task.Delay(1000) … タイマー処理。 |
I/Oバウンド、CPUバウンド、メモリバウンド
| I/Oバウンド | I/Oが原因でプログラムの実行速度に制約を受ける(遅くなっている)こと。 I/OはInput/Output、入出力のこと。ネットワーク通信、SSD/HDDへのアクセスなど。 |
| CPUバウンド | CPUの処理速度が原因でプログラムの実行速度に制約を受ける(遅くなっている)こと。 |
| メモリバウンド | メモリの容量やアクセス速度が原因でプログラムの実行速度に制約を受ける(遅くなっている)こと。 |