登录
首页 >  Golang >  Go问答

golang如何终止一个有阻塞io读操作的goroutine?

来源:SegmentFault

时间:2023-02-16 15:25:42 470浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《golang如何终止一个有阻塞io读操作的goroutine?》,聊聊go,希望可以帮助到正在努力赚钱的你。

问题内容

比如开启一个goroutine阻塞读取UDP

read, _, err := socket.ReadFromUDP(data)

如果系统的signal没有注册的情况下,默认信号会终止这个阻塞调用,进而终止goroutine。问题来了,程序为了stop gracefully,捕获了一些信号(

SIGTERM
等),如何让上面的goroutine终止呢?

我目前的办法是,读取调用设置一个

deadline
,外部通过chan让这个goroutine结束。但问题是,这样做,总有一个延迟,最坏的情况是
deadline
设置的最大延迟:

for {
        select {
        //外部通过close(done)通知退出
        case 

有没有更好的办法解决这个问题呢?

正确答案

想要结束stocket.ReadFromUDP内部的循环监听 我想到的就两种方式,第一关闭UDP链接,第二设置deadline。

今天关于《golang如何终止一个有阻塞io读操作的goroutine?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表