C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

マルチスレッドとスレッド数に関して

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■83053 / inTopicNo.1)  マルチスレッドとスレッド数に関して
  
□投稿者/ むすむり (1回)-(2017/03/01(Wed) 18:18:53)

分類:[.NET 全般] 


コア数2、スレッド数4のCore i5のCPUが搭載されたPCを使っているのですが

Taskコマンドを使って
重い計算処理のマルチスレッドプログラムを作成しています。



マルチスレッドを使わない場合には、
4つあるうちの一つのスレッドしか使わないため、
タスクマネージャーで確認すると、
一つのスレッドだけが使用率100%でその他の3つが0%となります。


二つのタスクを同時に投げて計算を行うと
なぜか、二つのスレッドが70%くらいで、他の二つが30%くらいとなります。
なぜ二つのタスクなのに、4つのスレッドを使用しているのでしょうか?

また、7つのタスクを同時に投げて計算を行うと
4つのスレッドが全て使用率100%になります。
スレッドの最大数よりも多いタスクを投げた場合、
どのように計算は行われるのでしょうか?

最初の4つが終わってから、残りの3つを計算するのか、
4つのスレッドで7つのタスクを同時にこなそうとするか
どちらでしょうか?






引用返信 編集キー/
■83060 / inTopicNo.2)  Re[1]: マルチスレッドとスレッド数に関して
□投稿者/ とっちゃん (425回)-(2017/03/02(Thu) 10:58:10)
No83053 (むすむり さん) に返信
>
> コア数2、スレッド数4のCore i5のCPUが搭載されたPCを使っているのですが
>
> Taskコマンドを使って
> 重い計算処理のマルチスレッドプログラムを作成しています。
>
>
>
> マルチスレッドを使わない場合には、
> 4つあるうちの一つのスレッドしか使わないため、
> タスクマネージャーで確認すると、
> 一つのスレッドだけが使用率100%でその他の3つが0%となります。
>
内部で SetThreadAffinityMask をセットして
特定コアで動かすことで実行効率を上げるようにしているのかもしれません。

Taskについてはリファレンスソースも見てないので。
でも、かなり実行効率を上げるためのいろいろな施策は行われているはずです。


>
> 二つのタスクを同時に投げて計算を行うと
> なぜか、二つのスレッドが70%くらいで、他の二つが30%くらいとなります。
> なぜ二つのタスクなのに、4つのスレッドを使用しているのでしょうか?
>
こちらは恐らくですが、1スレッドでは賄えないので特定のコアで作業するようにしていない
ということだと思います。


> また、7つのタスクを同時に投げて計算を行うと
> 4つのスレッドが全て使用率100%になります。
> スレッドの最大数よりも多いタスクを投げた場合、
> どのように計算は行われるのでしょうか?
>
> 最初の4つが終わってから、残りの3つを計算するのか、
> 4つのスレッドで7つのタスクを同時にこなそうとするか
> どちらでしょうか?
>
物理スレッドが4で7つのタスクなら最終的には全部同時に行くと思います。
ただし、それまでの実行状況や、タスクの規模(実行時間)などによっても左右されるので
必ず4個、あるいは7個であるとは言えません。

.NET のタスクスケジュールの仕組みは非常に凝っていて、実行環境の物理スレッドは
基準としていますが、その時点でプールされているワーカースレッド(上限はある)の空き状況や
未作成のワーカースレッドの状況などを見て適宜スレッドを増やしていく形になっています。

そのため、タスクがそこで初めてという状況であればほぼ7個は並行動作(同時実行)すると思います。

引用返信 編集キー/
■83061 / inTopicNo.3)  Re[2]: マルチスレッドとスレッド数に関して
□投稿者/ なちゃ (176回)-(2017/03/02(Thu) 12:23:23)
一つ補足しておくと、いわゆるcpuのスペックを示す際に使用するスレッド数という言葉と、プログラミングやOSレベルでのスレッドは、近い意味もありますが、実質的には全く別物です。
CPUスペックで出てくるスレッドを物理スレッドとでも呼ぶなら、プログラミングレベルやOSのスレッドは論理的なスレッドになります。
論理的なスレッドは、物理スレッドのどこかに随時割り当てられて動くイメージです。
論理的なスレッドは2つでも、4つの物理スレッドを定期的に渡り歩く可能性があるため、一定時間内で物理スレッドが2つしか使われないとは限りません。
引用返信 編集キー/
■83084 / inTopicNo.4)  Re[3]: マルチスレッドとスレッド数に関して
□投稿者/ むすむり (3回)-(2017/03/05(Sun) 10:22:54)
参考になりました
ありがとうございます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ