3

我有一个从非阻塞套接字读取的单独线程,我可以根据需要使用尽可能多的 CPU,因为低延迟是项目最重要的方面。简单地循环 read() 调用会比首先使用 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
    }
}
4

1 回答 1

1

不,它不会更快,因为您不知道数据何时到达。所以,要么你睡太久,这不是更快,要么你睡得太短,在这种情况下,你必须重新做一遍,这不是更快,或者你会很幸运,睡得正好正确的时间,这不是更快,需要运气,否则你根本不会睡觉,这意味着你必须烧 CPU 直到数据到达,这也不是更快。

于 2012-12-16T04:34:38.057 回答