我正在基于HTTP Server 3示例为Mac OS X做一个Boost asio网络程序。它使用async_read_some异步读取TCP套接字中的数据。
问题是我的处理程序返回的数据非常少。我给它一个64k缓冲区,但它通常返回大约1448字节,这是一个完整的以太网数据包的大小。当存在大量数据传输时,这反过来导致高CPU使用率,我无法想象所有这些内核到用户空间的跳转都是有效的。
这样的小块数据是否正常?
有没有办法告诉TCP堆栈或asio框架在返回之前尝试在内核中缓冲更多数据?
答案 0 :(得分:1)
这很简单:一旦事情变得繁忙,您将立即开始获取更大量的数据。这就是它的全部内容。是的,当系统未加载时,以如此小的块获取数据是非常正常的。这实际上是理想的行为:您正在利用低系统负载来获得非常好的延迟。如有必要,事情会从这一点优雅地降级。