2016-11-25 7 views
-1

私はC++アプリケーションを作成します。同時にいくつのスレッドを実行できますか?CPU/OSで扱えるスレッドの数はいくつですか?

+1

:あなたは、CPUの数と同時にできるだけ多くのスレッドを実行することができますあなたが利用可能なコア。 –

+0

私は先に進み、「あなたは何をお勧めしますか」を削除します。ライブラリの推奨事項は、StackOverflowのトピック外です。 –

+1

私は1998年に2コアシステムに45スレッドのマルチスレッドdicomワークステーションを設計し実装したことを覚えています。処理の大部分は、いくつかのスレッドプール内のバックグラウンドタスクであり、各プールは異なる優先順位を持ちます。最近では16倍のコアを持っていますが、通常は多くのスレッドを使用しません。 – drescherjm

答えて

3

基本的に、お使いのOSは無限に多くのスレッドを処理できます。これはコンテキスト/スケジューリング要求のリストを保持する単なる問題です。

と同時には、あなたが実際に「正確に同じ時間に実行する」という意味では、もちろんCPUのコアよりも並列実行できません。しかし、より広い意味では、「ファイルI/Oを待つなどして1つのスレッドがブロックされている間に、他のスレッドが作業を行うことができるように実行される」という制限はありません。

有用性には限界があります。処理のオーバーヘッドがあり、スレッドを切り替えると頻繁にキャッシュが無効になりますが、ハード制限はありません。

+0

_「今、同時に弾力的な言葉です」_それは議論の余地があります。 –

+0

@πάνταῥεῖもっと良いですか? –

+0

実際にはありません。問題は、その問題が広い意味であり、閉鎖すべきであるということです。また、ステートメント_ "基本的に、あなたのOSは多かれ少なかれ無限に多くのスレッドを処理できます。" _は間違っています。 –

1

hardware_concurrency()呼ばstd::threadメンバ関数はコンテキストハードウェアスレッドの数の推定値を返すことがあります:

経験則として
#include <iostream> 
#include <thread> 

int main(){ 
    std::cout << std::thread::hardware_concurrency() << std::endl; 
    return 0; 
} 
関連する問題