高速なサーバの書き方補遺
Kazuho@Cybozu Labs: 高速なCometサーバを書いてみた件, Kazuho@Cybozu Labs: C++ テンプレートを使って高速な高機能サーバを書く方法 の実装で、やっていることやさぼっていることについて。
- epoll や kqueue のような高速な select(2) を使う
- syscall の数を減らす
- ソケットをノンブロッキングにしておいて、とりあえず write(2) して EWOULDBLOCK が返ってきた場合のみ poll に登録すべき
- time(2) 等を毎回呼ばない (キャッシュしておいて別スレッドかメインループで定期的にアップデート)
- 不必要な抽象化を避ける
- poll がサポートできるのはソケットとタイムアウトだけ
- ステートの確認や変更が高速にできるようなデータ構造を使う
- ソケットオブジェクトはデスクリプタ番号が添字の配列で
- タイムアウトはビットアレイの配列で
こんなところかなぁ。