Windowsプロセスでは、一度に使用されるスレッドに制限があります。そうであれば、プロセスごとに使用できるスレッドの最大数はいくらですか?プロセスがウィンドウ内に持つことができるスレッドの最大数は何ですか?
答えて
は、私の知っている制限はありませんが、二つの実用的な限界がある:スタックのための
- 仮想空間。例えば、32ビットでは、プロセスの仮想空間は4GBですが、一般的な使用には約2Gしか使用できません。デフォルトでは、各スレッドは1MBのスタック領域を確保するため、最高値は2000スレッドです。当然ながら、スタックのサイズを変更してスレッド数を減らすことができます(パラメータ
dwStackSize
はCreateThread
、リンカコマンドのオプションは/STACK
)。 64ビットシステムを使用する場合、この制限は事実上消えます。 - スケジューラオーバーヘッド。何千ものスレッドを読んだら、スケジューリングするだけでCPU時間の100%近くを食べるので、とにかく役に立たない。これは厳しい制限ではなく、作成するスレッドの数が増えるにつれてプログラムが遅くなり、遅くなります。
まあ、スレッドの状態に依存します。 6000のブロックされたスレッドは、私のマシンの動作に影響しません。また、たとえスレッドが準備完了/実行中であったとしても、16スレッドまたは1600を持っていれば大したことになりません。どちらの場合でも4/8コアが最大になります。 –
@MartinJames:カーネルスケジューラがスレッドテーブルのサイズで次のスケーリングを実行するかどうかを決定するために使用するアルゴリズムです。間違いなく、詳細はWindowsのバージョンによって異なりますが、私はWinXPで 'for(); Sleep(1000)'だけで2000スレッドを作成し、CPU使用率は80%を超えたことを覚えています。 – rodrigo
IIRCでは、readdtスレッド構造は、基本的にスレッド情報ブロックポインタの優先度順のキューの配列です。 1つのキューに2000個のエントリがあるがコアが4つしかない場合は、タイマー割り込みでスレッドの周りをシャトルするだけで、「古い」4つのスレッドをバックでプッシュし、4つの「新しい」スレッドを前面からポップする必要があります。待ち行列が長い。それは長くかかることはありませんか? –
実際の制限は、さまざまな方法で使用可能なメモリの量によって決まります。 Windowsでは、「これ以上多くのスレッドやプロセスを持つことはできません」という制限はありませんが、システム内で使用できるメモリの量には限界があります。スレッド。
マークRussinovich氏によるこのブログを参照してください: http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx
- 1. テーブル変数がSQL Serverに持つことができるレコードの最大数
- 2. スレッド同期 - プロセスの最大スレッド数
- 3. MongoDBが持つことができるシャードの最大数はいくらですか?
- 4. 最大ヒープサイズを大きくすると、スレッドの最大数が減少するのはなぜですか?
- 5. 私のプログラムで持つことができるクラスの最大数はいくらですか?
- 6. SpecRunで利用できるスレッドの最大数は何ですか
- 7. 1つのCUDAカーネルで開始できるスレッドの最大数
- 8. スレッドがプロセスと共有していないことは何ですか?
- 9. 私が持つことができる最長の文字列は何ですか?
- 10. プロセス内で1つのスレッドがクラッシュするとどうなりますか?
- 11. ウィンドウがwpfで最大化されると、ウィンドウ内のすべてを伸ばすことができますか?
- 12. Golang、数学/大:* big.Intの最大値が何であるか
- 13. プロセス内の特定のスレッドが複数のジョブを作成することは可能ですか?
- 14. box2d b2BodyDefはCocos2Dで大量データプロパティを持つことができますか?
- 15. なぜ2つのスレッドを持つ8つのプロセスが、16のスレッドを持つ1つのプロセスより多くの負荷を生成するのですか?
- 16. フィールドセットの凡例内に複数のフォーマットを持つことができます
- 17. Androidアプリケーションはどのように複数のプロセスを持つことができますか?
- 18. アプリケーションで実行できるスレッドの最大数は?
- 19. オブジェクトがdjango-taggitに持つことができるタグの最大数をどのように制限できますか?
- 20. 複数のFilterAttributesを持つことができますか?
- 21. システムが持つことができる物理メモリの最大量を決定する要因は何ですか?
- 22. Lispでは、+関数は実際に何個の入力を持つことができますか?
- 23. Asp.net ThreadPoolで利用可能なスレッドの最大数は何ですか
- 24. XMLはテキスト内にタグを持つことができますか?
- 25. スレッド内のクリティカルセクションとは何ですか?
- 26. 私たちはアプリ内で2タブビューを持つことができますか?
- 27. モデルはCakePHPで複数のテーブルを持つことができますか?
- 28. JConsoleがプロセスを見つけることができません
- 29. 1つのCプログラム内で複数の端末ウィンドウに出力することはできますか?
- 30. PostgreSQLのINSERT文に入れることができるVALUESの最大数はいくらですか?
あなたはhttps://www.google.de/#q=What+is+the+maximum+number+of+threads+a+process+を試してみました既に+ in + windowsを持つことができますか? –
私はこれをテストしました。私の64ビットVistaの究極のものは〜7000スレッド以上を作成することを拒否し、正確な数字を覚えることはできません。 –