高速なサーバの書き方補遺

Kazuho@Cybozu Labs: 高速なCometサーバを書いてみた件, Kazuho@Cybozu Labs: C++ テンプレートを使って高速な高機能サーバを書く方法 の実装で、やっていることやさぼっていることについて。

  • epoll や kqueue のような高速な select(2) を使う
  • syscall の数を減らす
    • ソケットをノンブロッキングにしておいて、とりあえず write(2) して EWOULDBLOCK が返ってきた場合のみ poll に登録すべき
    • time(2) 等を毎回呼ばない (キャッシュしておいて別スレッドかメインループで定期的にアップデート)
  • 不必要な抽象化を避ける
  • ステートの確認や変更が高速にできるようなデータ構造を使う
    • ソケットオブジェクトはデスクリプタ番号が添字の配列で
    • タイムアウトはビットアレイの配列で

こんなところかなぁ。