1

メイン実行パス (メイン スレッド) は 2 つの実行パス (異なるジョブの 2 つの新しいスレッド) にフォークされますが、メイン スレッドは不要になります。タスクの 1 つをメイン スレッドに割り当てて、1 つのスレッド (メイン スレッドによる 1 つのタスクと新しいスレッドによる別のタスク) を保存することはできますが、メイン スレッドを無限スリープ状態Thread.Sleep(Timeout.Infinite)にするのが良い方法かどうか疑問に思っていました。私のクラスは何度もインスタンス化される予定であり、無限スリープ状態のスレッドが OS からリソースを取得する場合、それは私にとって悪いニュースです。

4

2 に答える 2

1

作成する各スレッドは、スタック スペースを占有します。Windows では、デフォルトで 1MB です。オペレーティングシステムがスレッドを追跡するために使用する他の内部ハウスキーピングデータ構造もありますが、これも少しメモリを消費しますが、1MB スタックはリソースの最大の消費者になることは間違いありません。

そうは言っても、2 スレッド対 3 スレッドについてのみ話しているのであれば、違いは非常に小さいです。もしそれが 200 対 300 だったら、何か心配があるかもしれません。ただし、多数のスレッドを生成する場合は、個々のスレッドを生成するよりも、ある種のスレッド プール ( .NET Framework に組み込まれているものなど) を使用した方がよいでしょう。

于 2010-10-05T04:55:40.773 に答える
0

すべてのスレッドは、スリープしているかどうかに関係なく、リソースを占有します。

于 2010-10-05T04:47:31.860 に答える