スレッドとプロセス
スレッドとプロセスは、コンピューター科学における関連概念です。 いずれも特定の順序で実行する必要がある命令のシーケンスを表します。 ただし、別個のスレッドやプロセスの命令は並列実行できます。
プロセスは、オペレーティング システム内に存在するものであり、ユーザーがプログラムやアプリケーションとして認識するものに相当します。 一方、スレッドはプロセス内に存在します。 このため、スレッドは、軽量プロセスと呼ばれることもあります。 各プロセスは、1 つ以上のスレッドで構成されます。
複数のプロセスが存在すると、コンピューターは、同時に複数のタスクを実行できます。 複数のスレッドが存在すると、プロセスで作業を分割して並列実行できます。 マルチプロセッサを搭載したコンピューターでは、プロセスやスレッドを各プロセッサに振り分けて実行できます。 これにより、真の並列処理が実現されます。
完全な並列処理は、常に実現できるとは限りません。 スレッドの同期が必要になることがあります。 スレッドは、別のスレッドが結果を生成するまで待機したり、別のスレッドが使用しているリソースに排他的にアクセスしたりすることが必要な場合があります。 同期に関する問題は、マルチスレッド アプリケーションで発生するバグの一般的な原因です。 また、スレッドは、決して利用可能にならないリソースを待機することがあります。 その結果、デッドロックと呼ばれる状態が生じることがあります。
Visual Studio デバッガーは、強力で使いやすい、スレッドとプロセスのデバッグ用ツールを提供します。
Visual Studio のスレッドおよびプロセスのデバッグ用ツール
Visual Studio でのプロセスのデバッグで使用する主要なツールは、[プロセスにアタッチ] ダイアログ ボックス、[プロセス] ウィンドウ、および [デバッグの場所] ツール バーです。 スレッドのデバッグで使用する主なツールは、[スレッド] ウィンドウ、ソース ウィンドウのスレッド マーカー、および [デバッグの場所] ツール バーです。
マルチスレッド アプリケーションのデバッグで使用する主なツールは、[並列スタック] ウィンドウと [並列タスク] ウィンドウです。
各ツールで提供される情報と実行できる操作を次の表に示します。
ユーザー インターフェイス |
提供される情報 |
実行できる操作 |
---|---|---|
[プロセスにアタッチ] ダイアログ ボックス |
アタッチが可能なプロセス
|
アタッチ先のプロセスの選択。 リモート コンピューターの選択。 リモート コンピューターに接続するためのトランスポートの種類の変更。 |
[プロセス] ウィンドウ |
アタッチされたプロセス
|
ツールでの操作 :
ショートカット メニューでの操作 :
|
[スレッド] ウィンドウ |
現在のプロセス内のスレッド
|
ツールでの操作 :
ショートカット メニューでの操作 :
その他の操作 :
|
ソース ウィンドウ |
左端余白のスレッド インジケーターは、スレッドが 1 つか複数かを示します (既定ではオフで、[スレッド] ウィンドウのショートカット メニューを使用してオンにすることができます)。 |
ショートカット メニューでの操作 :
|
[デバッグの場所] ツール バー |
|
|
[並列スタック] ウィンドウ |
|
|
[並列タスク] ウィンドウ |
|
|