
使用できるスレッドの最大数を調べるにはどうしたらよいでしょうか。プログラミングは初心者なので、何を知る必要があるか調べています。Amazon S3 からダウンロードするファイルが 950 GB あります。2 つのスレッドを使用して、それぞれがその量の半分をダウンロードし、並列で実行できると考えていました。
アプリケーションをマルチスレッド化することで、Amazon S3 からの大量データのダウンロードを高速化したいと考えていますが、まずは自分のコンピューターがマルチスレッドをサポートしているかどうかを知ることが大切です。
コンピュータの仕様:
- モデル: MacBook (13 インチ、2010 年中期、A1342)
- プロセッサ:2.4GHz インテル Core Duo
- メモリ: 8 GB 1067 MHz DDR3
- ソフトウェア: MacOS Sierra 10.12.6
このプロセッサは非常に古く、製造中止になっているため、Intel ハイパースレッディングをサポートしていません。マルチスレッドに適しているかどうかはわかりません。しかし、マルチスレッドをサポートできる場合、サポートできるスレッドの数はいくつですか。また、スレッドを多すぎるとパフォーマンスに影響はありますか。
間違っていたら訂正してください。でも、私はこう読みましたハイパースレッディング非対応のコアは1つのスレッドしかサポートできないしたがって、私のプロセッサは最大 2 つのスレッドをサポートできると思いますが、それ以降のスレッドはほとんど影響がないと考えられます。
答え1
あなたの質問にはいくつか誤った仮定がありますので、ここで明確にしておきます:
- シングルコア CPU でもマルチスレッドが可能です。実行は時間的に分割されるので、特定の瞬間にアクティブなスレッドは 1 つになりますが、全体的なスレッドの実行は並列に行われます。
- マルチスレッド化はスピードアップと同じではありません。単純に設計すると、マルチスレッド アプリはシングルスレッド アプリよりも常に数十倍、場合によっては数百倍遅くなります。
- 外部ネットワークからのダウンロードは、99% の場合、マルチスレッドに依存しません。NetAnts、ReGet などのダイヤルアップ モデム時代のアプリで実装されていたようなマルチレンジ HTTP ダウンロードを検討する価値はあるかもしれません。ただし、さまざまなネットワーク ポリシーと関連するサーバーがあるため、マルチレンジ ダウンロードが通常のダウンロードよりも高速であるという保証はありません。
つまり、結局のところ、アプリ内で必ずメトリクスを収集する必要があります。最も遅い操作は何ですか? そして、速度を上げるために再設計します。
答え2
使用できるスレッドの最大数を確認するにはどうすればよいでしょうか?
Intel Core Duo には 2 つのコア シングル スレッド プロセッサが搭載されているため、2 つのスレッドがあります。各コアにはシングル スレッドの機能があります。
しかし、マルチスレッドをサポートできる場合、いくつのスレッドをサポートできますか? また、スレッドが多すぎるとパフォーマンスに影響はありますか?
2つのスレッドをサポートします。
したがって、私のプロセッサは最大 2 つのスレッドをサポートできると思いますが、それ以降のスレッドはほとんど影響がないと考えられます。
2 つ以上のスレッドを処理することはできません。ハードウェアの都合上、2 つのスレッドしか生成できないため、マルチスレッド アプリケーションには 2 つのスレッドしかありません。