DBD::mysql の async について
並列にバンバン処理するかっこいい機能がついたわけではなく、だいぶアドホックな実装になっている。
mysql client として考えた場合に処理が遅いのは、DB サーバーの I/O や集計処理で、データを返しはじめてからの処理は速い、という経験則にもとづいた処理となっている。
request をなげておいて、sock を poll しておき、readable になったら blocking I/O で普通に読む。mysql server は返しはじめたら一気に書くので、読みはじめたら一気によんでも問題がない。という実装依存のコードになっている。
という感じの実装になってるので、一般的な実装とだいぶちがうので、普通の実装だとおもって読んでると混乱する。
【201402181531 追記】
「select * from t みたいなケースだと、i/o bound でダラダラデータが返ってくる」と kazuho さんに教えてもらいました。
つまり、そういう、データを大量におくってくるときにはつかえませんね!
少量のデータをおくってくる遅いクエリを処理する場合にだけしかつかえませんね。