- PR -

ThreadのPriorityについて

投稿者投稿内容
Bob
常連さん
会議室デビュー日: 2006/03/23
投稿数: 31
投稿日時: 2006-06-15 11:18
引用:

ところで、止まるってのはどれぐらいの間止まってるんでしょうか。もうその後動かないと見て良いぐらい? 数秒?
話の流れとしては前者っぽいですが。
スレッドの内部での処理も気になります。外部コンポーネントを使っているとか、COM を触ってるとか。
止まる位置のコードの特定はできているんでしょうか? 不特定の位置で止まる?



こんにちは。大分時間が立ちましたが、再度このスレッドを継続させて頂きます。

未だに、前記の止まる位置が特定できていません。現象的には、あるThreadの動作中に止まったり(DeadLockがなさそうですが)、Thread.StartをしたはずのThreadはThreadStatusがずっと「Backgroud」と「Unstarted」のまま、Startしなかったりしている状況です。

ここで、一つ知りたいのは、Process内にあるThread数[BackGroupとForground両方]はどの位は妥当でしょうか?ThreadPoolのデフォルト値は25で、そうするとProcess内の総Thread数はこの数値を超えると何か不都合が生じるリスクが大きくなるでしょうか?

自分のProcessでは、BeginInvokeとThread.Startで起したThreadピーク時のThread数は
軽く50を超えてしまうので(.Netはウラで勝手に動かしているThreadもある?)、この辺り危険でしょうか?

以上、宜しくお願い致します。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-06-15 12:18
引用:

ここで、一つ知りたいのは、Process内にあるThread数[BackGroupとForground両方]はどの位は妥当でしょうか?



他にもいろんなプロセスが起動しているでしょうから、一概には言えませんが、CPUコア1個あたり数スレッドくらいに留めておくのが吉です。

引用:

ThreadPoolのデフォルト値は25で、そうするとProcess内の総Thread数はこの数値を超えると何か不都合が生じるリスクが大きくなるでしょうか?



リスクちゅーか、優先度の関係でなかなか実行されません。

引用:

自分のProcessでは、BeginInvokeとThread.Startで起したThreadピーク時のThread数は
軽く50を超えてしまうので(.Netはウラで勝手に動かしているThreadもある?)、この辺り危険でしょうか?



よろしくないです。

1コアのCPUで、他にも標準的なプロセスが起動している状態でスレッド50個が待ち状態にもせずに並行に実行してしまったら、なかなか実行の機会が与えられません。

グリッド向きのアプローチを、たかだか数個のコアしか持たないシステムで実践しては駄目です。

Bob
常連さん
会議室デビュー日: 2006/03/23
投稿数: 31
投稿日時: 2006-06-16 13:16
引用:

渋木宏明(ひどり)さんの書き込み (2006-06-15 12:18) より:

1コアのCPUで、他にも標準的なプロセスが起動している状態でスレッド50個が待ち状態にもせずに並行に実行してしまったら、なかなか実行の機会が与えられません。

グリッド向きのアプローチを、たかだか数個のコアしか持たないシステムで実践しては駄目です。



ご指摘ありがとうございます。自分ももしかすると止まったように見えたThreadが何らかの理由で実行の機会がもらえないのではないと考え始めました。
そこで、調査するにはProcessのThread情報を抽出したいのですが、ProcessThreadにはThreadIDしかなく、自分でThread.Startで生成したThreadにはThreadNameしかなく、ThreadIDが取れません。関連付けするには何らかの方法がありますか?

以上、ご教授お願いします。
Bob
常連さん
会議室デビュー日: 2006/03/23
投稿数: 31
投稿日時: 2006-06-22 17:13
自己レスですが、以前起きたThreadが止まってしまう現象ですが、もしかするとAutoResetEvent絡みの問題になっているかもしれません。AutoResetEventに関するパッチがあって、この件に詳しい情報を持っている方はいらっしゃるなら、是非教えて頂きたい。

なお、WindowのProcess内のThreadは同時間間隔で切り替えているので、特定なThreadを切り替えせずに、最初から最後まで完了させることが可能ですか?

以上、宜しくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)