在非阻塞套接字上读取()而不选择低延迟

时间:2012-12-16 03:56:05

标签: c++ sockets nonblocking

我有一个从非阻塞套接字读取的单独线程,我可以根据需要使用尽可能多的CPU,因为低延迟是项目最重要的方面。简单地循环读取()调用比使用select()首先查找可读的套接字更快吗?

的伪代码:

while (!finished) {

    int rc = read(socket, buf);
    if (rc > 0) {
        // process buf
    } else if (rc == 0) {
        // eof, reconnect to server
    } else if (errno == EGAIN) {
        // nothing to do, continue
    } else if (errno == ECONNREFUSED) {
        // connection refused, attempt connect again
    } else {
        // error not yet supported
    }
}

1 个答案:

答案 0 :(得分:1)

不,它不会更快,因为您不知道数据何时到达。所以,要么你会睡得太久,哪个不会更快,要么你会睡得太短,在这种情况下,你必须再这么做,这不会更快,或者你会很幸运,准确地睡觉正确的时间,这不是更快,需要运气,或者你根本不会睡觉,这意味着你必须刻录CPU直到数据到达,这也不会更快。