2

私はウェブクローラーに取り組んでいます。各リクエストごとにスレッドを作成せずに多くのリクエスト(たとえば、毎秒500〜1000)を実行することは可能ですか(スレッドプール、再利用などを意味するものではありません)?

4

1 に答える 1

1

ここで必要なのは、単一のスレッドが n 個のリクエストを同時に処理できることだと思います。

これは、2 つのスレッドを処理するための手順をインターリーブすることを意味します。これは、「ブロッキング」操作があった場合にのみ意味があります。

さて、はい、私たちはブロックします。だから私が欲しいのは

  1. リクエスト1が行われ、応答を待っています
  2. リクエスト 1 の応答が返ってくるのを待っている間に、リクエスト 2 を開始します。
  3. リクエスト 1 のレスポンスを取得して処理する
  4. リクエスト 2 のレスポンスを取得して処理します。

これは、HTTP が「非同期」である場合にのみ可能です。残念ながらそうではありません。(OK リード -> http://wiki.answers.com/Q/Why_http_is_asynchronous ) ブラウザの AJAX と同じことを行う「非同期」HTTP クライアントがいくつかあります。

呼び出しを開始したスレッドが続行できるようにします。応答はコールバックで返されます。

真実は、これらの呼び出しを同期的に処理するスレッドプールを持っているということです。非同期に見えるだけです。

例:

http://hc.apache.org/httpcomponents-asyncclient-dev/index.html

于 2012-12-27T16:14:12.063 に答える