データ送受信の性能
次にサーバとクライアントで情報のやり取りが行われた場合の処理時間を計測します。
クライアントはスレッドで行い、コネクションの確立はプロセス内でシリアライズされるようにスレッドを立てる前に確立しておきます(理由は「コネクション確立の性能」の通り)。
コネクションが確立した後、クライアント(=スレッド)から決められたデータ量/処理回数でデータを送受信し、開始から終了までの時間を計測します。コネクション数、繰り返し送受信数とデータ量はプログラム引数で指定します。処理終了後にクライアント内の処理時間を計測し、画面に出力します。
プログラムは200行を超えているため、ここでは割愛します。ダウンロードして参照してください。
スレッドからデータの送受信を繰り返すため、スレッド切替などの時間が加わることで実際の処理時間とは異なる可能性が高いですが、傾向くらいはつかめると思います。
検証数値は、コネクション数を10,000、処理回数を100回と1,000回、データ量を1,024バイトと10,240バイトとしました。その時の傾向を見ます。
# ./poll_performance 10000 100 1024 # ./epoll_level_performance 10000 100 1024 # ./epoll_edge_performance 10000 100 1024
# ./poll_performance 10000 100 10240 # ./epoll_level_performance 10000 100 10240 # ./epoll_edge_performance 10000 100 10240
# ./poll_performance 10000 1000 1024 # ./epoll_level_performance 10000 1000 1024 # ./epoll_edge_performance 10000 1000 1024
計測結果は下記の通りです。
コネクションの時と同様、epollの性能がpollに比べて優れているようです。傾向として、epollのエッジトリガが若干優れているように思います。



