繁体   English   中英

kqueue 挂起 state 0x8 和大小 4,使用 ZMQ

[英]kqueue hangs with state 0x8 and size 4, using ZMQ

当我在 mac 上使用 ZMQ 通过 TCP 接收消息时,几个小时后我得到了使用 100% CPU 的程序。 通过使用 lsof,我发现 kqueue 进入了有线 state

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

格格拉姆一直在等着什么。

有人能告诉我队列中的 state 8 是什么意思吗?

代码详情:

语言:哥朗

package: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

使用阻塞接收而不是轮询器并不能改善这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM