DOBON.NET DOBON.NETプログラミング掲示板過去ログ

スレッド数の管理について

環境/言語:[WindowsXP]
分類:[.NET]

VB.NET2005で開発しています。

ただいま環境が無いため、自分でテストする事が出来ず申し訳ありませんが…

現在、スレッドタイマを使って一定間隔で処理を実行しています。
スレッドタイマから呼び出される関数内では、スレッドプールを使って別処理を
実行させてます。これで、一定間隔で処理が動いているかのようにしています。

ここで気になったのが、実行できるスレッド数についてです。
プロセッサ数×25、というのをどこかで見ましたが、これは一つのEXEで実行
出来る数なのでしょうか?それともWindows全体??
ついでで申し訳ありませんが、今自分が実行しているスレッド数の数を把握する
には、いったいどうしたらよいのでしょうか?
> プロセッサ数×25、というのをどこかで見ましたが、これは一つのEXEで実行
> 出来る数なのでしょうか?それともWindows全体??

「プロセッサ数×25」ですので、全体です。

> ついでで申し訳ありませんが、今自分が実行しているスレッド数の数を把握する
> には、いったいどうしたらよいのでしょうか?

http://codezine.jp/a/article.aspx?aid=139&p=2#limit_threadpool

をご覧ください。

> スレッドタイマから呼び出される関数内では、スレッドプールを使って別処理を
> 実行させてます。これで、一定間隔で処理が動いているかのようにしています。

老婆心ながら追記しておきますが、スレッドタイマのコールバックメソッドはスレッドプールスレッドで実行されますので、そこからまた別のスレッドを実行させることは、無駄になるかもしれません。
■No21354に返信(管理人さんの記事)
>>プロセッサ数×25、というのをどこかで見ましたが、これは一つのEXEで実行
>>出来る数なのでしょうか?それともWindows全体??
>
> 「プロセッサ数×25」ですので、全体です。

何か勘違いしてるのではないでしょうか?
各プロセスごとに「プロセッサ数x25個のスレッド」をアクティブにできます。

Windows全体でプロセッサ数x25個ではありません。

スレッドの利点はプロセスの切替が無い点です。
Windows全体でスレッドプールを共有してしまうと、
プール内のスレッドを切り替えるときにプロセス切替が起きてしまいますので、
スレッドをプールする意味がありません。
予断ですが、.NET 2.0 で、ThreadPool のワーカスレッドの最大数がかなり増やされているようです。
// そう言えばドキュメントじゃ相変わらずプロセッサ当たり 25 になってるな。

// AppDomain が絡んだときはどうなるんだろー。
■No21356に返信(Hongliangさんの記事)
> 予断ですが、.NET 2.0 で、ThreadPool のワーカスレッドの最大数がかなり増やされているようです。
> // そう言えばドキュメントじゃ相変わらずプロセッサ当たり 25 になってるな。

それなんですが、詳しく調べてないのですが、
謎なんですよね。

Core x 1(コア2個)なVistaで500
Xeon x 2(コア4個)なW2k3で100

なのです。
環境によってはいまだにコア数x25の場合もあるっぽいのです。
誰か詳しく調べて欲しいところです。
2008/01/28(Mon) 12:44:57 編集(投稿者)

や、それこそ MS に文句言うところじゃないっすか?
// XPSP2/P4HT でも 500.
// あ、サーバ向けかワークステーション向けかとか? 取り敢えず app.config の gcConcurrent 要素は影響なしか。
■No21358に返信(Hongliangさんの記事)
> 2008/01/28(Mon) 12:44:57 編集(投稿者)
>
> や、それこそ MS に文句言うところじゃないっすか?

むぅ。
めんどいです。
どなたかお願いします。
皆様、お返事ありがとうございます。

スレッドは各プロセスごとにアクティブにでき、プロセスの切替がないのが利点と
覚えておきたいと思います。
本当にありがとうございました。


// そう言えばドキュメントじゃ相変わらずプロセッサ当たり 25 になってるな。

あら…いろいろあるんですね〜
ちんぷんかんぷんのことを書いてしまい、失礼しました。寝る直前になって変なことを書いたような気がしていたのですが...。しかも、現在では1つのプロセッサに25までというのが全くの間違いであるということは初めて知りました。

少し調べただけですが、確かにCLR 2.0 SP1から250/CPUになったというようなことが書かれています。

Joe Duffy's Weblog
http://www.bluebytesoftware.com/blog/2007/03/05/WhyTheCLR20SP1sThreadpoolDefaultMaxThreadCountWasIncreasedTo250CPU.aspx

また、ASP.NET 2.0では100/CPUだというような記事もありました。

Max threadpool count in ASP.NET 2.0
http://www.pluralsight.com/blogs/fritz/archive/2006/04/11/21480.aspx

DOBON.NET | プログラミング道 | プログラミング掲示板