-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Welcome to the AnyEvent-Curl wiki!
これは何であるか
- WWW::CurlをAnyEvent経由で使う。
- WWW::Curlおよびlibcurlのバージョンが古いと動かないかも知れない。
- リクエストにはHTTP::Requestを使用可能で、レスポンスにHTTP::Responseを作ることが可能だが、スピードを追求する場合使わない方が良い。
- 大規模なクローラや、速度が必要なhttpベースのRPC向けに作られている。
- より使いやすく安定して拡張性があるモジュールが必要なら素直にLWPを使うべき。
やるべきこと
- LWP互換? Coroと組み合わせる必要がある。
やらないこと
- スロットリング、時間あたりのリクエスト数や同時接続数の制限は別のモジュールで行えば良いので入れない。
ベンチマーク
eg/benchmark.plにあり。LWPとAnyEvent::HTTPと比較する。
1350bytesの画像をApacheから取ってみた場合
Benchmark: timing 5 iterations of anyevent, curl, curl_http_response, lwp…
anyevent: 1 wallclock secs ( 0.93 usr + 0.06 sys = 0.99 CPU) @ 5.05/s (n=5)
curl: 1 wallclock secs ( 0.09 usr + 0.07 sys = 0.16 CPU) @ 31.25/s (n=5)
curl_http_response: 1 wallclock secs ( 0.20 usr + 0.03 sys = 0.23 CPU) @ 21.74/s (n=5)
lwp: 1 wallclock secs ( 1.06 usr + 0.07 sys = 1.13 CPU) @ 4.42/s (n=5)
$VAR1 = {
‘curl_http_response’ => [
‘0.165105’,
‘0.149703’,
‘0.142932’,
‘0.144679’,
‘0.150628’
],
‘anyevent’ => [
‘0.299707’,
‘0.300679’,
‘0.305004’,
‘0.316546’,
‘0.328444’
],
‘curl’ => [
‘0.129166’,
‘0.13237’,
‘0.13642’,
‘0.127258’,
‘0.1271’
],
‘lwp’ => [
‘0.450891’,
‘0.295978’,
‘0.336803’,
‘0.34191’,
‘0.40273’
]
};
結果と考察
50回リクエストを投げたCPU使用時間とリクエスト完了までにかかった秒数が分かる。LWPは並列化しないで50回リクエストしている。
並列化しているので当然、LWPよりもAnyEventやCurlの方がリクエスト完了までの時間が短くなる。
AnyEventのリクエスト完了までの時間が長いのは、1サーバー当たりの接続数制限があるため。公正な比較では無い。
結果をHTTP::Responseに変換してもCPU使用時間がAnyEvent::HTTPより低い。
結果をHTTP::Responseに変換した場合で、LWPよりもCPU時間が1/5になっている。
LWPの場合(ベンチ取ったマシンだと)、1CPUあたり秒間約220リクエストしか投げれない。
HTTP::Responseを作らなければ、1CPUあたり、最大で1500request/secぐらい投げられる。