12

私はできるだけ多くの同時httpダウンロードをIPad2(ios6.0)で実行しようとしています。これは、このデバイスで何ができるかをテストするためのものです。GUI のパフォーマンスに興味がない (応答しない場合は重要ではない)

x 分間データをクライアントに送信する特別な HTTP サーバーを作成しました。受信したデータは重要ではありません。速度と同時ダウンロード数を測定するだけです。12 の HTTP リクエストをスケジュールする 2 つの異なる方法を実装しました。

NSオペレーション

1 つは、Queue で NSOperation オブジェクトを使用し、NSOperationQueueDefaultMaxConcurrentOperationCount を 12 に設定することによって行われます。

NSスレッド

2 番目の実装は、同期 http 要求を実行する 12 個の NSThreads を作成することです。

リクエストはすべて同じ宛先 IP に送信されます。

観察

私が観察したのは、どちらの場合も、6 番目から 12 番目のリクエストで TimeOut (エラーコード -1001) が発生したことです。タイムアウト値を 80.0 秒に設定すると、1 回目のダウンロードが完了すると 6 回目のダウンロードが開始されることがわかります。

質問

  • IOS には同時ダウンロード数の制限はありますか?
  • これらの同時ダウンロードを実行する他の方法はありますか?
  • スレッドをコアにバインドする方法はありますか (C++ の cpuaffinity のように割り込みを受けないようにするため)、またはスレッドの優先順位
4

4 に答える 4

20

同じサーバーに最大 5 つの同時接続を確立できます。これは iOS の固定制限であり、おそらく http プロトコルの制約によるものです。ここでもう少し詳しい情報を読むことができます。

于 2013-02-26T12:41:29.080 に答える
4

誰かがまだ見ている場合に備えて、これにぶつかるだけです。私のiPhone6S+では4台同時に表示されています。私のテスト手順は次のとおりです。

  • 何かをエコーバックする前に sleep(10) を実行する PHP スクリプトを作成しました。
  • ボタンを追加しました(起動後にうまく実行できるように)
  • そのボタンを押すと、30 の同時 NSURLConnections (同期要求ですが、それぞれ別のスレッドにあります) と NSLog がトリガーされます。
  • それぞれの完了は NSLog を行います

結果は時計仕掛けのようです。最初の応答 (そのうちの 4 つ) は、要求の 12 秒後に返されます (おそらく、ラジオをオンにするのに 2 秒か何か) が、4 つの応答の後続の各ブロックは、前の 4 つのブロックの 10 秒後に返されます。時間。

それが誰かを助けることを願っています。

于 2016-07-27T21:56:24.963 に答える
1

IOSには、同時ダウンロードの数に制限がありますか?

ちなみに、これはサーバーベースの制限であり、iOSの制限ではありません。異なるサーバーから同時にこれを実行しようとすると、現在の制限を超える可能性があることがわかります。

これらの同時ダウンロードを実行する他の方法はありますか?

もちろん、GCDを使用して、同時リクエストを手動で管理することもできますが、これNSOperationQueueは優れたソリューションであり、それ以上に検討する理由はないと思います。確かに、スレッドを使用することの利点もわかりません。

同時リクエストの数が増えるにつれて、合計経過時間をベンチマークする必要がありますが、収穫逓減のポイントに達すると確信しています。同時リクエストを増やすだけでは、全体的なパフォーマンスは向上しません。

于 2013-02-26T14:16:05.160 に答える