我需要编写一个C++程序以高速率接收来自2个不同NIC的udp数据包 - 每个套接字大约45MB/s(同一台计算机上每个网卡的单个套接字)。我开始创建一个基于事件的套接字(使用WSAEventSelect),但我想知道:这种类型的套接字模型(基于事件)可能意味着一些performane惩罚? (因为事件将以高速率触发,因此操作系统可能会导致一些延迟) 如果我选择阻塞套接字,我会减少延迟吗? 是否可以说在高吞吐量情况下,阻塞套接字可能会胜过非阻塞套接字?阻塞套接字性能与非阻塞套接字
注意:可伸缩性不是问题,因为我们处理不超过两个套接字。
感谢,
交流
完全正确,尽管我甚至倾向于说阻塞调用的延迟明显较少,不仅“几乎相同”,即使每个套接字只有一个单独的阻塞线程(尽管线程可能会执行其他处理接收,所以一些额外的线程是没有错误的)。当NIC以任何方式触发中断时,数据报进入接收缓冲区,并且使用阻塞API节省了排队(和非排队)APC和簿记OVERLAPPED结构的开销。 – Damon