3

プロジェクトの最も重要な側面は低レイテンシであるため、必要なだけ多くの CPU を使用しても問題ないノンブロッキング ソケットから読み取る別のスレッドがあります。最初に select() を使用して読み取り可能なソケットを探すよりも、単純に read() 呼び出しをループする方が速いでしょうか?

擬似コード:

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 に答える