关于UDP
SO_MAX_MSG_SIZE并非发送缓冲区的大小.
这个指示允许发送一个UDP报文的最大长度.
因为UDP是无连接的,没有重充传机制,所以不需要缓冲区. 他只是简单的将数据包发送到以太网接口上.
操作系统会保证每个线程都有机会得到运行.
另外:
从系统处理以太网帧的过程来看, 在以太网卡底层驱动将目标地址是本机的分组接收过来,
然后根据协议向上提交到不同的协议处理模块:ARP, RARP, IP. 然后根据传输层协议分别向上递交到不同的协议处理模块:TCP, UDP, ICMP, IGMP. 在传输层协议再根据相应端口来进行过滤, 分别放到不同的接收SOCKET的缓冲区中(系统为每一个建立的SOCKET分配一个接收缓冲区, 用户可以改变默认的大小, 一般来说, 如果网络流量比较大的情况下, 而且, 机器的处理速度比较曼的话, 可以将接收缓冲区设的比较大, 以免减少丢包. ).
对UDP报文来说, 这些分组将进入到IP协议处理模块, 然后, IP协议处理模块对其进行简单的校验. 并根据协议递交到UDP协议处理模块, UDP协议处理模块同样进行简单的校验, 查看相应的端口, 如果该端口存在监听的SOCKET, 然后将报文放到UDP的接收缓冲区中; 否则该报文将被丢弃.
监听SOCKET进程在获得CPU时间片的时候, 将从自己的接受缓冲区中读取这些报文.
从上面的说明中, 可以知道, 如果使用非阻塞的方式的话, 分开两个线程和一个线程对于接收数据来说,基本上没有两样. 反而,还会增加系统切换的时间. 这个值取决于CPU的处理能力, 以及网络接口的带宽.

浙公网安备 33010602011771号