程序大致逻辑如下,会正常运行一段时间,receiving msg
和sleeping
会交替打印,但运行一段时间后最后输出一段pipeline sleeping
之后就再也没有日志了,没有pipeline terminate
,没有 panic,也没有到 defer 那一步
var sigChan = make(chan os.Signal, 1)
func init() {
signal.Notify(
sigChan,
os.Kill,
os.Interrupt,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT,
)
}
func (ip *InnerPipeline) Run() {
defer func() {
log.Infof("pipeline<%s> defer exit", ip.name)
}()
for {
select {
case im := <-ip.messageQueue:
log.Debugf("receiving msg %+v", im)
// some logic ....
xxxxxxxxxxxxxxx
log.Debugf("quit case")
case <-sigChan:
log.Infof("pipeline terminate")
return
default:
log.Debugf("current chan len: %d", len(ip.messageQueue))
// some logic ....
xxxxxxxxxxxxxxx
log.Debugf("pipeline<%s> sleeping...", ip.name)
time.Sleep(50 * time.Millisecond)
}
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.