ソケットの通信の効率化をネットワークカードレベルで考える
サーバーで沢山のコネクションを受け付ける場合に、スレッドや非同期で処理すると思います。
その際にソケットで単純にRecv()してSend()していますが、ネットワークカードに対して効率の良い書き込みや読み込みの作法はあるのでしょうか?
たとえばスレッドでソケットに大量に書き込んでも、けっきょくネットワークカードからビット情報を通信媒体へ転送する処理がシリアルに処理されているとしたらスレッドをある数以上立てて書き込んでもあまり意味がない(むしろよくない)、などの指標はありますか?
もちろんデバイスとソケットの間にバッファが存在するので、非同期で書けるだけ書いておいて、プログラムは次の処理をすればいいという考えもあると思います。
TCPスロースタート問題や遅延ACKなどのレイヤの話は一旦棚に上げて、単純にソケット書き込みとその先のデバイスの間の話の議論になります。
ネットワークのデバイスレベルの仕組みに詳しい方がいましたら教えていただけると助かります。
参考までに、今回の質問は下記のサイトのNICの物理層を見ていてなんとなく浮かんだ質問です。
http://lantech.up.seesaa.net/subpage/nic.html
PCS(Physical Coding Sublayer)
PMA(Physical Medium Attachment)
PMD(Physical Medium Dependent)