日期:2014-05-16  浏览次数:21337 次

linux下发送tcp,发现数据大了以后,cpu占用很高,如何解决
我采用的方法是使用 while(1) 循环发送,并没有使用线程,硬件平台是arm。
有人说是因为tcp的封包非常耗费cpu,但是我在想,tcp的封包不是硬件自己完成的吗。

------解决方案--------------------
20MB/s,,你的网速估计也达不到那么快吧。这样send时就会出现-1, errno == EAGAIN  (因为发送缓冲会被你填满)。send返回-1是立即的。
你只是在每个循环时固定延时纳秒是没用的!仍然会出现大量发送失败的情况(-1,errno == EGAIN)。CPU占用率当然会高了!你可以检测下。
你应该使用select,poll这样的东西。你的情况使用select就行了。 select能监视sockfd的可写(可读)事件,一直睡眠直到可写(可读)事件发生。。这样每次send都会成功,发送缓冲满时,进程会阻塞在select中,不占CPU!! 用法百度/GOOGLE  linux select