[英]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.