当前位置: 技术问答>linux和unix
linux socket发包收包,cpu使用太多,请教?
来源: 互联网 发布时间:2016-08-03
本文导语: 本帖最后由 krockk 于 2010-01-22 14:28:42 编辑 程序1 父进程不停地发包(pf_socket,只添了个mac头), fork了一个子进程,统计传回来的包, while(1) { if((len_t=recvmsg(s, msg, 0)) > 0 && ((Frame_t *)(msg->msg_iov->iov_base))->EtherHeader.h_proto == ht...
父进程不停地发包(pf_socket,只添了个mac头),
fork了一个子进程,统计传回来的包,
while(1)
{
if((len_t=recvmsg(s, msg, 0)) > 0 && ((Frame_t *)(msg->msg_iov->iov_base))->EtherHeader.h_proto == htons(ehtype))
{
memcpy(&pktime, CMSG_DATA(cmsg), sizeof(pktime));
time = pktime.tv_usec - ((Frame_t *)(msg->msg_iov->iov_base))->pkttime;
if (time 0)
{
recvnum++;
memcpy(buf, buf+6, 6);
memcpy(buf+6, SA, 6);
from->sll_pkttype = PACKET_OUTGOING;
n=sendto(s, buf, len_t, 0, (struct sockaddr*)from, sizeof(*from));
if(n>0)
sendnum++;
......
}
}
两个程序一运行,cpu直接用完了,我试图降低发包速率,不影响cpu正常的情况下,只有20M,太低了吧
请教原因及解决方法?多谢!
|
可以sleep下!
|
你两个程序时在一个机上上运行的吗?那样的话CPU用光的的可能性很大的,都是while(1)。如果在不同的机器上应该会好些的!毕竟接收是要用时间的,弱弱的问下liuyu60305002 sleep不影响效率吗?听说sleep(0)可以达到cpu休眠的目的,但是我试验的结果是没有休眠。期待更明确的回答!
|
嗯,这样的话,你可以用毫秒级的定时器,setitimer!在你程序一发送的时候隔段时间试试!
|
发包 用sleep,多休息.
收包 用select,自己别好盯着让别人去干活!
^_^
收包 用select,自己别好盯着让别人去干活!
^_^
|
5毫秒或者10毫秒试试吧~想速率进可能大,cpu使用不要太离谱,我个人认为是鱼和熊掌的关系~~
|
介绍 sleep(0)
http://blog.csdn.net/burningcpu/archive/2008/09/20/2955275.aspx
http://blog.csdn.net/burningcpu/archive/2008/09/20/2955275.aspx