書籍『Googleを支える技術』(技術評論社)の著者で知られる西田圭介氏によるブログ記事です。1つのサーバでより多くのクライアント数をさばくために起きる「C10K問題」を取り上げ、マルチコアのサーバをどのように設計すればよいかを考察しています。
西田氏はエントリ中で、いくつかある手法のうち、イベント駆動を基本とし、並列処理が可能なところではイベントハンドラをマルチスレッドで走らせる「マルチスレッド化されたイベント駆動」に着目しています。そして「Jeff Darcyによる高性能サーバ設計に関する忘備録」に書かれているコンテキストスイッチとロック競合についてまとめています。
Jeff Darcy氏の記事には、大まかに次のようなことが載っています。
- コンテキストスイッチが増えると性能に影響が出る
- イベント駆動で実装する際、同じスレッドがワーカやリスナになれるようにし、無駄なコンテキストスイッチを発生させない
- 大きなロックから始めて徐々に分割していく、という設計は間違っている
- プログラムを、縦軸をコード、横軸はデータという軸で垂直水平に分割してロック空間を定義し、均等に分散させる
西田氏は実際に自身が構築したサーバ設計に当てはめ、現在の問題点と改善ポイントを明らかにしています。この記事以降でもマルチスレッドやイベント駆動に関する話題を取り上げています。
URL:http://d.hatena.ne.jp/nishidakeisuke/20080502/p1