Perlでepoll, kqueue などを使った、イベントドリブンで効率的なネットワークアプリケーションを作成できる Danga::Socketを、手軽に扱えるようにした、Danga::Socket::Callbackについて、日本語の情報があまりに少ないので書いてみました。
TokuLog 改めB日記 のtokuhiromさんの書かれた、
Danga::Socket::Callback がクールな件について
この記事のコードでは、on_write_readyコールバックが、それが不必要になったあと(書きこみバッファが空になった後)も延々と呼び出されてしまい、CPU使用率が100%にはりつき、無駄に資源を消費するので、地球環境に良くないコードです。
そもそも、on_write_readyなどの、書きこみバッファの減少をとらえる仕組みは、普通のアプリケーションには不要だと考えます。
ポイントは、待ち受け用のソケットは最初からNon-Blockingモードで始めるのではなく、Blockingモードで始めたあと、Non-Blockingモードに移行した方がエラー検出が簡単にできるということと、
Danga::Socketの->read()が返してくれるものは、文字列の参照なので、その点注意するということです。
0 コメント:
コメントを投稿