当前位置: 首页 > news >正文

做网站需要的服务器今日足球最新预测比分

做网站需要的服务器,今日足球最新预测比分,长春市人民政府,跳出率 网站用channel控制goroutine的退出 本文简要介绍了,如何用channel控制goroutine的退出的基本方法 for-range主动停止goruitine package mainimport ("fmt""sync""time" )/* Go并发编程模型:主动停止goroutine 方法一&#…

用channel控制goroutine的退出

本文简要介绍了,如何用channel控制goroutine的退出的基本方法

for-range主动停止goruitine

package mainimport ("fmt""sync""time"
)/*
Go并发编程模型:主动停止goroutine
方法一:for-rang从channel上接收值,直到channel关闭
*/
var wg sync.WaitGroupfunc work(ch chan int) {defer wg.Done()// for range关键字,将其使用在channel上时,会自动等待channel的动作一直到channel被关闭close// 也就是clase(sh)后,for range就会退出for i := range ch {fmt.Println(i)}fmt.Println("work exit")
}func main() {wg.Add(1)var ch chan intch = make(chan int)go work(ch)for i := 0; i < 3; i++ {time.Sleep(1 * time.Second)ch <- i}time.Sleep(3 * time.Second)for i := 4; i < 7; i++ {time.Sleep(1 * time.Second)ch <- i}// close(sh)来控制"work"协程中的for range的完成close(ch)wg.Wait()
}

后台定时任务

	// 设定一个定时器,当定时器触发是就执行一次任务tricker := time.NewTicker(1 * time.Second)defer fmt.Println("tricker.Stop()")defer tricker.Stop()for {select {case <-stopCh:fmt.Println("do1 exit.")return//心跳,心跳一次就执行一次任务case <-tricker.C:time.Sleep(1 * time.Second)fmt.Println("do1 doing....")}}

使用stopCh控制goroutine退出

package mainimport ("fmt""sync""time"
)var wg sync.WaitGroupfunc do1(stopCh chan struct{}) {defer wg.Done()for {select {case <-stopCh:fmt.Println("go1 exit.")returndefault:time.Sleep(1 * time.Second)fmt.Println("go1 doing....")}}
}
func do2(stopCh chan struct{}) {defer wg.Done()for {select {case <-stopCh:fmt.Println("go2 exit.")returndefault:time.Sleep(1 * time.Second)fmt.Println("go2 doing....")}}
}func main() {wg.Add(2)stopCh := make(chan struct{})go do1(stopCh)go do2(stopCh)time.Sleep(5 * time.Second)// 让一个goroutine退出stopCh <- struct{}{}time.Sleep(5 * time.Second)// 让另一个goroutine退出stopCh <- struct{}{}wg.Wait()}

关闭channel来控制goroutine退出

package mainimport ("fmt""sync""time"
)/*
多个通道都关闭才退出
利用select的一个特性,select不会在nil的通道上进行等待
*/
var wg sync.WaitGroupfunc work(in, exit1, exit2 chan bool) {defer wg.Done()for {select {// 当exit管道收到信号后退出goroutinecase v := <-exit1:fmt.Println("exit1 收到退出信号")fmt.Println("v=", v)exit1 = nilcase <-exit2:fmt.Println("exit2 收到退出信号")exit2 = nilcase value := <-in:fmt.Println(value)}fmt.Println(time.Now())fmt.Println("遍历了一次")// 当2个退出通道都收到信号时,就退出for循环if exit1 == nil && exit2 == nil {return}}}func main() {in := make(chan bool)exit1 := make(chan bool)exit2 := make(chan bool)wg.Add(1)go work(in, exit1, exit2)for i := 0; i < 6; i++ {time.Sleep(5 * time.Millisecond)in <- true}// 主动停止goroutine方法一//exit1 <- 1//exit2 <- 1// 主动停止goroutine方法二close(exit1)close(exit2)wg.Wait()}
http://www.mmbaike.com/news/54963.html

相关文章:

  • 苏州高端网站建设咨询外贸seo优化公司
  • 阿里巴巴如何建设网站首页重庆网站快速排名提升
  • 北京建设信源咨询有限公司网站it培训学校
  • 莱芜网站建设公司新东方在线网上课程
  • 网站建设 万网seo需要什么技术
  • 做网站的像素麒麟seo
  • 网站xml地图网站优化公司开始上班了
  • 国外做批发的网站有哪些手续软件开发定制
  • 新颖的互联网公司名字百度seo霸屏软件
  • 公众号网站制作电商运营主要负责什么
  • wordpress .htaccess在哪里苏州seo安严博客
  • 工程建设动态管理网站如何优化网站快速排名
  • 阿里巴巴怎么做不花钱的网站站长网站查询工具
  • 呼市网站建设如何查询域名注册人信息
  • 上海企业网站建设补贴百度 营销推广靠谱吗
  • 宝安做棋牌网站建设找哪家效益快发布任务注册app推广的平台
  • 做网站值钱吗互动营销
  • 哪些网站用vue.js做的中国网评中国网评
  • wordpress双首页浙江专业网站seo
  • 网站建设推广的10种方法市场营销公司有哪些
  • 石家庄免费网站建设广州seo全网营销
  • 网站分成比例系统怎么做个人免费自助建站网站
  • 杂志网站建设电商网站建设制作
  • 做传销网站违法的吗百度上首页
  • 哪里有做ppt模板下载网站百度网盘网站入口
  • 单页滚动网站10常用的网络营销方法
  • 南京企业网站设计公司河北seo推广方案
  • 南阳网站优化排名今日头条权重查询
  • 网站大气模板如何优化网络环境
  • 武汉市网站开发公司电话现在什么网络推广好