开启了多个协程 其中一个协程满足条件后终止select, 原以为其他的协程会在后台系统中继续悄悄运行 直到主进程关闭而关闭 。

做一实验发现select 监听退出 会关闭所有监听的goroutine

package main

import (
"fmt"
"time"
) var stop bool = false func main() {
ch := make(chan int, )
ch2 := make(chan int, )
defer func() {
close(ch)
close(ch2)
}()
go func() {
ch <-
}()
for i := ; i <= ; i++ {
go func(ch2 chan int) {
for {
fmt.Println(time.Now().Unix()) ch2 <-
if stop {
fmt.Println("sqlpop stop")
return
}
} }(ch2)
} L:
for {
select {
case m := <-ch:
fmt.Println(m)
stop = true
time.Sleep(time.Second * )
break L
case <-ch2:
}
} time.Sleep(time.Second * )
}

输出

/data/GoPro/src/test/test  [/data/GoPro/src/test]

成功: 进程退出代码 .

原以为输出1后回继续打印时间 但实际select退出后 其余的协程也退出了 不会一直打印直到主进程退出

golang select 退出结束goroutine的更多相关文章

  1. Golang学习笔记:goroutine

    1.goroutine goroutine是go语言的并发体.在go语言里面能使用go关键字来实现并发. go func() 1.1 概念介绍 goroutine本质上是协程,我刚刚学习的时候就粗略地 ...

  2. Golang(三)Goroutine原理

    前言 最近用到了一些 Golang 异步编程的地方,感觉 Golang 相对于其他语言(如 Java)对多线程编程的支持非常大,使用起来也非常方便.于是决定了解一下 Goroutine 的底层原理. ...

  3. golang使用pprof检查goroutine泄露

    有一段时间,我们的推送服务socket占用非常不正常,我们自己统计的同一时候在线就10w的用户,可是占用的socket居然达到30w,然后查看goroutine的数量,发现已经60w+. 每一个用户占 ...

  4. [Go] golang原子函数实现goroutine同步

    启动了两个goroutine,并完成一些工作.在各自循环的每次迭代之后,在goroutine 会使用LoadInt64 来检查shutdown 变量的值.这个函数会安全地返回shutdown 变量的一 ...

  5. Golang select

    Golang下select的功能和Linux IO复用中的select, poll, epoll相似,是监听 channel 操作,当 channel 操作发生时,触发相应的动作. package m ...

  6. 一个Golang例子:for + goroutine + channel

    Rob Pike 在 Google I/O 2012 - Go Concurrency Patterns 里演示了一个例子(daisy chain). 视频地址:https://www.youtube ...

  7. go select 使得一个 goroutine 在多个通讯操作上等待。

    select 语句使得一个 goroutine 在多个通讯操作上等待. select 会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个条件分支.当多个都准备好的时候,会随机选择一个. pac ...

  8. 关于golang select的用法

    1 go的信道 1.1 什么是信道 信道可以理解为go协程之间进行通信的通道. 1.2 信道的声明 所有的信道都关联一个类型,一旦关联了类型,该信道就只能传输该类型的数据,传输其它类型的数据的话就是非 ...

  9. [Golang] http.Post导致goroutine泄漏

    记录一个用http.Post的问题 if _, err := http.Post("http://127.0.0.1:8080", "", nil); nil ...

随机推荐

  1. (第三场) A PACM Team 【dp,五维背包】

    链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  2. HDU1069 Monkey and Banana

    HDU1069 Monkey and Banana 题目大意 给定 n 种盒子, 每种盒子无限多个, 需要叠起来, 在上面的盒子的长和宽必须严格小于下面盒子的长和宽, 求最高的高度. 思路 对于每个方 ...

  3. 数据库——MySQL——数据类型

    详细的看后面给的链接,我只是挑了一部分:http://www.runoob.com/mysql/mysql-data-types.html 在之前说了MySQL的存储引擎.它决定了表的类型,而表内存放 ...

  4. SQL0668N 不允许对表XX执行操作,原因码为 "3"

    DB2 Load导入数据失败之后,表被锁,提示,SQL0668N 不允许对表XX执行操作,原因码为 "3". 之前也遇到过,当时都是现查现用的,现在在博客记一下,以备后查. 解决方 ...

  5. Vue+Electron实现简单桌面应用

    之前一直使用C#编写桌面应用,也顺带写一些Web端应用.最近在看node时发现常用的vscode是用electron编写的,一种想吃螃蟹的念头就涌了上来. 在网上找了找electron的资料,也研究了 ...

  6. HDFS的存储策略

    本文介绍hdfs的存储策略 内容译自:http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/ArchivalStor ...

  7. Flask模拟实现CSRF攻击

    CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...

  8. Co. - Microsoft - Windows - Tomcat、JDK、MySQL通过 Inno 集成为exe部署包

    需求 客户设备为Windows系统,需要部署公司产品,因此将Tomcat.JDK.MySQL.Java.war 打包整合成exe文件,Windows下一键部署安装. 最佳实践 1.下载免安装的mysq ...

  9. ajax在同一页面中同控制器不同方法中调用数据并异步刷新的实例

    我在实习以来都有做一些笔记,之前做的笔记都在简书里,现在我提前把公司给我的任务做好了,坐在电脑前又不好玩别的,那么我就整理下我之前的笔记吧!(此项目是thinkphp5开发的) 先上效果图 这是整体页 ...

  10. PHP无法用下标访问

    php数组分为普通数组和关联数组,普通数组可以用下标访问,而关联数组不可以.