スレッドとはどのようなものか。
アプリの中のタスクや道のことです。スレッドが多いほど一つのアプリの中で様々な処理が同時並行に行われています。
一つのアプリは基本1プロセスで動き、スレッドを複数起動した場合でも、1プロセスの中に複数スレッドが動くことになります。
スレッドもスレッド間はある程度独立した存在になります。(ただ、ヒープメモリに関してはスレッド同士で共有しています。逆に言えば、これを利用してバッググラウンドスレッドに情報を共有させて進捗状況の表示などに使えたりします。)
プロセス
1つのコンピュータ上で並列に処理させることができるというためにOSレベルの概念になります。
スレッドの用途
クライアントプログラム
UIと重い処理のを別々のスレッドで実行するなどの用途で使われます。
サーバープログラム
クライアントからくる複数のリクエストを並列に捌くために使われたりします。そうすることでクライアントプログラムの待ち時間を減らすことが可能です。
スレッドの種類
メインスレッド
アプリにおいて必ず1つは割り当てられるスレッドのこと。プライマリスレッドとも呼んだりします。
C#のクライアントプログラム(コンソール、WindowsForm、WPF)ではOS及びCLRによってアプリケーションの開始時 に1つのスレッドが作られます。逆に言えば、クライアントプログラムでは必ずこちらで処理させる必要があります。
ワーカースレッド
メインスレッドとは別に補助的に作成するスレッド。
時間のかかる処理などをバックグラウンドのワーカースレッドに任せたりできます。(UI入力などはメインスレッドに任せる。)
C#のクライアントプログラムにアクセスする場合は、BeginInvokeメソッドなどを使用して、UIスレッドに処理を行わせる必要がありますので、注意してください。
Visual Studioでのスレッドのデバッグの仕方
1.メインスレッドで動いているかどうか確認したい箇所に、ブレークポイントを貼って止める。
2.「デバッグ」→「ウインドウ」→「スレッド」をクリックする。
現在実行中のスレッドが表示されます。
スレッドで気をつける点
- スレッドの切り替えや並列処理でシングルスレッドに比べてCPUを大量に消費します。
- 一概にワーカースレッドの数を増やせば高速化できるとは限らないのでその辺はお使いのマシンスペックに依存する部分にはなるので実装する場合は適切な設計が必要になります。
この記事へのコメントはありません。