1

質問: プロセスごとにいくつの「QThread」インスタンスが「合理的」ですか?

(これは特に Qt のQThreadインスタンスを参照していますが、論理的には、質問は任意のライブラリを使用するスレッドベースの設計に関連している必要があります。)

たとえば、プラットフォーム固有のリソース制限がデフォルトで最大 30QTcpSocketのインスタンスをサポートするように設定されている場合があることを私は理解していQThreadます。 . ただし、これらのスレッドのほとんどはネットワーク トラフィックを「スリープ/待機」する必要があるため、これは大した問題ではない可能性があります。

QThread同様に、 「重い連続作業」を課されたインスタンスの「コア」または「ネイティブスレッド実行可能」の数までインスタンス化すると仮定します。したがって、8 つのコアがある場合、それはさらに 8 つのQThreadインスタンスになる可能性があります (システムが最大負荷にある場合、これらは常に動作している可能性があります)。

そしてもちろん、「メインスレッド」があります。

これは、インスタンス化することを意味しますか:

(30 個のソケットスレッド) + (各コアの 8 個のワーカー) + (1 個のメインスレッド)

...39 スレッドの場合 (8 コア システム上)?

具体的には、アプリケーション固有のニーズに他のスレッドプールのニーズがあり、ここに 12 個のインスタンスを追加し、そこにQThread12QThread個のインスタンスを追加したQThread場合、それらのほとんどが「アイドル/眠っている/待っている」ですよね?

それで、カットオフはありますか?「39スレッド」は「合理的」ですが、「300スレッド」は「不合理」ですか?

(はい、「スレッドあたり 10MB」などの「スレッドあたりのデフォルト スタック サイズ」があることは理解しています。そのため、仮想メモリによって制限されています。しかし、実際には、30K スレッドをインスタンス化するのはばかげていますか? - そんなものを欲しがるのは悪い設計ですか?)

4

1 に答える 1

0

QThread::idealThreadCount()を使用して、すべてがビジー状態のときにパフォーマンスが向上する可能性のあるスレッドの数を調べることができます。ほとんどが待機するスレッドの場合、制限は OS に依存しますが、Qt の場合は、非常に多くのスレッドではなく、シグナルスロット システムを使用することをお勧めします。特に追加のスレッドにも独自のイベントループがある場合は、追加のスレッドよりも信号が接続されたオブジェクトだけを持つ方が常に軽量です。ほとんどの Qt ネットワーク アプリケーションは、おそらくスレッド化をまったく使用すべきではありません。

于 2012-10-16T20:43:07.540 に答える