Windows XPプラットフォーム(i7 2.1 Ghzプロセッサ)で実行されているアプリケーションがあります。このアプリケーションは、UDPを介したマスターノードとスレーブノード間のマスター/スレーブベースの通信です。マスターは要求を送信し、スレーブノードはその応答(バーストモード)で5ミリ秒ごとにデータのパケットを送信します。各データパケットの長さはヘッダーを含めて1300バイトです。
マスターノードに戻ると、メインスレッドがデータを受信してキューに書き込み、並列スレッドがスレッドから読み取るようにトリガーします。
問題:次のパケットを読み取る際のWinsock APIの実行時間が非常に長いため、データがバッファーから失われています。
実行時間:Recvfrom()-200-400マイクロ秒。
Open_Sock ()
{
socket();
//Error check
connect ();
//Error Check
}
Receivethread()
{
sock again:
select(socket, read,write,excep,(0,0));
//error check
rc = recvfrom(socket,buf,len,0,&s_addr,&cln_alen)
if(rc>0) {
enqueue(queue,buf);
}
}
Winsock APIは、次のパケットをフェッチするためだけにそれほど長い時間を必要としないと確信しています。しかし、実際の実行時間はどうあるべきかについての情報を見つけることができません。方向性の助けは本当にありがたいです。