2012-03-12 6 views
1

1)私はIPアドレスのプールをスキャンする必要があるiosアプリケーションを作成しています。それぞれに時間がかかりますので、私は自分のアプリでマルチスレッドを実装したいと思っています。 私はスレッドクラスを使用しようとしていましたが、私はsimuntaneoulsyを作成できるスレッド数について疑問を抱いています。それは、各スレッドが512KBのメモリを取るdeveloper.appleガイドに記載されています。だから、それは私のアプリケーションがハングアップしないだろう、私は100スレッドを作成すると、それ以上の可能性がありますか?GCDとスレッドクラスの違いに関する疑問

2)スレッディングに関する1つの疑問:すべてのスレッドに同じオブジェクトを渡すと、各スレッドは独自のオブジェクトを作成します(操作する)。実際に、それらはすべて同じタスクを実行しています 3)GCDディスパッチ)それから私は利点がありますか?私はこの特定の状況で私を助けるだろうか?

3)また最後の1つです。類似しているがパフォーマンスを向上させるために同時に実行する必要があるタスクを実行する最適な方法は何でしょうか。注: これらのスレッドはすべて同じオブジェクトメソッドを使用してタスクを実行します。私はIMO奇妙

答えて

0

を鳴らす場合

おかげに関しては、最も簡単な方法は、単一のスレッド(またはdispatch_async'dされた単一のブロック)であなたのスキャンを実行し、その後に対処するkqueueを使用しています結果を効率的にkqueue APIは使い慣れていますが、あなたが望むことを行うための効率的な方法です。基本的な考え方は次のとおりです。

  1. ときに接続、それはあなたのスレッドを上に復帰しますように、あなたのkqueueのにソケットを追加し、各ソケットに接続し
  2. 作成、非ブロッキングソケット
  3. 呼び出したkqueueを作成します成功するか、タイムアウトする。詳細はman kqueueを参照してください。ループ内で
  4. を呼び出し、keventを呼び出します。待機中のイベントにキューキングするまで(タイムアウトまたは接続が成功した場合)、これはブロックされます。監視対象のソケットがない場合は、スレッドを終了します。
関連する問題