サーバで、100クライアントからの要求を 100ms 毎に 1回受信
(1クライアントは 10sec 毎に1回要求送信)
し、DB検索後、応答を最大 100ms 内に返す時の、サーバーの
I/O 戦略 (下記 url 参照) は、一般的に、どのような形になるでしょうか?
なお、その他の処理に DB 更新処理があります。

参考:
Winsock Programmer's FAQ: Articles: Which I/O Strategy Should I Use?
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html

まず、C# で beginread() (上のページの非同期型ソケット?)を使用して
作っていましたが、その他の DB 更新に時間がかる等、高負荷時に、
要求を受信しても、beginread() が起動しない (スニファで受信確認)、
という事象があり、応答が 100ms を超えてしまいます。

コンテキストスイッチが原因と思われたので、socket.select() で、
受信後、DB 検索を threadpool を利用し、別スレッドで実行し、
受信スレッドは、常に受信を続ける等を検討していますが、
正しいのでしょうか?

応答上限 100ms は、馬鹿げていると思いますが、仕様なので、
なんともなりません・・・

環境:
サーバ:Win2008 server 32bit sp1, Xeon5500 x 2, 4Gb
クライアント:WinXP sp3, Core 2 Duo 7400, 2GB
開発環境:VS2008 .net FW 3.5 sp1