私はウェブクローラーに取り組んでいます。各リクエストごとにスレッドを作成せずに多くのリクエスト(たとえば、毎秒500〜1000)を実行することは可能ですか(スレッドプール、再利用などを意味するものではありません)?
1731 次
1 に答える
1
ここで必要なのは、単一のスレッドが n 個のリクエストを同時に処理できることだと思います。
これは、2 つのスレッドを処理するための手順をインターリーブすることを意味します。これは、「ブロッキング」操作があった場合にのみ意味があります。
さて、はい、私たちはブロックします。だから私が欲しいのは
- リクエスト1が行われ、応答を待っています
- リクエスト 1 の応答が返ってくるのを待っている間に、リクエスト 2 を開始します。
- リクエスト 1 のレスポンスを取得して処理する
- リクエスト 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 に答える