Goroutines 协程在长期阻塞的状态下怎样跳过阻塞或者终止 协程

454356073 · 2015-12-20 11:48:21 · 3949 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-12-20 11:48:21 的主题,其中的信息可能已经有所发展或是发生改变。

Goroutines 协程在长期阻塞的状态下怎样跳过阻塞或者终止 协程 如题,我在做tcp服务端发现如果用户端无响应就始终阻塞在读取,无法结束Goroutines ,怎样才能内部或外部停止Goroutines


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3949 次点击  
加入收藏 微博
8 回复  |  直到 2016-03-13 15:59:14
blov
blov · #1 · 9年之前

读取完全可以通过超时,不能无限制的堵塞

454356073
454356073 · #2 · 9年之前
blovblov #1 回复

读取完全可以通过超时,不能无限制的堵塞

我应用过程是这样,那要怎样设置超时

454356073
454356073 · #3 · 9年之前
blovblov #1 回复

读取完全可以通过超时,不能无限制的堵塞

我现在就是一直保持在阻塞状态,不超时,也就无法结束Goroutines

blov
blov · #4 · 9年之前

程序里面肯定可以设置超时吧。网络程序超时很重要的。

Hubery
Hubery · #5 · 9年之前
go func(timeout time.Duration){
select{
case <-time.After(timeout):
return
case ....
}
}(time.Second)
Leonard
Leonard · #6 · 9年之前

tcp本来就可以设置超时的吧

haoyu_zjp
haoyu_zjp · #7 · 9年之前

goruotie只能自杀,不能通过类似 pthread_cancel这种方式外部杀掉的

unnamedfish
unnamedfish · #8 · 9年之前

超时可以采用这种做法 timeout :=make(chan bool ,1) go func(){ time.Sleep( SomeTime ) timeout<-true }() select { case <-theRealChannel: doSomeThing case <-timeout doSomeThing }

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传