kqueue зависает с состоянием 0x8 и размером 4, используя ZMQ - PullRequest
0 голосов
/ 10 октября 2019

Когда я использую ZMQ для получения сообщений через TCP на Mac, через несколько часов я получил программу, использующую 100% ЦП. Используя lsof, я обнаружил, что kqueue перешел в проводное состояние

myprogram 56486 user   13u  KQUEUE                                     count=4, state=0x8

, и грограмма продолжает что-то ждать.

Может кто-нибудь сказать мне, что означает состояние 8 в очереди?

коды детали:

язык: Golang

пакет: github.com/pebbe/zmq4

    poller := zmq.NewPoller()
    // sub is the zmq socket over TCP that receives message
    poller.Add(sub, zmq.POLLIN)
    for {
        polled, _ := poller.Poll(zeroMQTimeout)
        if len(polled) >= 1 && polled[0].Events&zmq.POLLIN != 0 {
            msg, _ := sub.RecvMessageBytes(0)
            go handleMsg(msg[1])
        } else {
            fmt.Printf("something happened at %s\n", time.Now())
        }
    }

путем входа в систему, я вижу, что основнойgoroutine висит где-то в цикле for, и он, вероятно, будет на sub.RecvMessageBytes.

Использование блокирующего приема вместо устройства опроса не улучшает ситуацию.

...