为什么sendto比recvfrom花费更多

时间:2016-05-09 18:00:57

标签: performance udp sendto recvfrom

我写了一个非常简单的程序,一台PC正在执行udp sendto,另一台PC执行recvfrom。在1Gbps以太网链路上,发送方需要13%的CPU,但接收方只需5% 任何人都知道为什么发送费用比recvfrom高得多,并且任何好主意都要降低寄件人的费用,非常感谢! 主要代码:

while (1)
{
    static int sendLen = 0;
    sendLen = sendto(socketfd, buffer, buflen, 0, (struct sockaddr *)&dest, sizeof(dest));

    totalSize += sendLen;
    ++loopcnt;
    totalsend++;

    if (loopcnt == COUNTNUM)
    {
        clock_gettime(0, &end);
        unsigned int timecost = 1000 * (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1000000; //ms
        double timecost_double = 1000 * (end.tv_sec - start.tv_sec) + ((double)(end.tv_nsec - start.tv_nsec)) / 1000000;

        printf("UDP APP TX %.1f M bps. PPS %.1f pps  packet size:%d, timecost=%.lf\n", (float)(totalSize * 8) / (timecost_double * 1000),
            (float)(loopcnt*1000) / (timecost), buflen, timecost_double);                     //timecost ms

        start = end;
        totalSize = 0;
        loopcnt = 0;

    }


}

1 个答案:

答案 0 :(得分:0)

如果您未在发件人中呼叫connect,则每次调用sendto都必须执行隐式临时连接操作,这会使其更加昂贵。在发件人中添加connect电话,并观看CPU使用率下降。