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

廊坊网站自助建站做关键词排名好的公司

廊坊网站自助建站,做关键词排名好的公司,律师论坛网站模板,怎样做网站二级页面context作用 goroutine的退出机制 多个goroutine都是平行的被调度的,多个goroutine如何协调工作涉及通信、同步、通知和退出 通信:goroutine之间的通信同步chan通道 同步:不带缓冲的chan提供了一个天然的同步等待机制。通过WaitGroup也可以…

context作用

goroutine的退出机制

多个goroutine都是平行的被调度的,多个goroutine如何协调工作涉及通信、同步、通知和退出

  • 通信:goroutine之间的通信同步chan通道

  • 同步:不带缓冲的chan提供了一个天然的同步等待机制。通过WaitGroup也可以为多个goroutine提供同步等待机制

  • 通知:这个通知和上面通信的数据不一样,通知通常不是业务数据,而是管理、控制流数据。要处理这个也好办,在输入端绑定两个chan,一个用于业务流数据,另一个用于异常通知数据,然后通过 select 收敛进行处理。这个方案可以解决简的问题,但不是一个通用的解决方案。

  • 退出:goroutine 之间没有父子关系,如何通知 goroutine 退出?可以通过增加一个个单独的通道,借助通道和 select 的广播机制( close channel to broadcast)实现退出

通知退出机制:

  • 读取已经关闭的通道不会引起阻塞,也不会导致panic,而是立即返回该通道存储类型的零值

  • 关闭select监听的某个通道能使select立即感知这种通知,然后进行相应的处理,即所谓的退出通知机制

contet库的设计目的就是跟踪 goroutine调用树,并在这些goroutine 调用树中递通知和元数据

  • 退出通知机制:通知可以传递给整个 goroutine调用树上的每一个goroutine

  • 传递数据:数据可传递给整个goroutine 调用树上的每一个goroutine

使用

var wg sync.WaitGroup
func main() {background := context.Background()//通过cancel进行控制/*cancelctx, cancelFunc := context.WithCancel(background)wg.Add(2)go jiankong1(cancelctx)time.Sleep(time.Second * 2)println("并不是因为主协程退出,而导致另一个协程退出,而是通过cancel方法通知另一个协程进行退出!")cancelFunc()wg.Wait()println("完成退出")*///通过deadline进行控制,也可以通过返回的cancelFunc手动进行控制/*deadline, _ := context.WithDeadline(background, time.Now().Add(time.Second*2))go deadF(deadline)time.Sleep(time.Second * 4)println("结束")*///通过timeout控制,也可以通过返回的cancelFunc手动进行控制   超时以后报的错和deadline控制方式一样 context deadline exceededtimeout, _ := context.WithTimeout(background, time.Second*2)go deadF(timeout)time.Sleep(time.Second * 4)println("结束")
}func deadF(ctx context.Context) {for true {select {case <-ctx.Done():fmt.Println("只给了两秒的执行时间,时间到了,我得退出了。")//此处打印的错误为 context deadline exceededprintln(ctx.Err().Error())returndefault:time.Sleep(time.Millisecond * 1000)fmt.Println("我正在执行...")}}
}func jiankong1(ctx context.Context) {defer wg.Done()cancel, _ := context.WithCancel(ctx)go jiankong2(cancel)for true {select {case <-ctx.Done():fmt.Println("别人通知我主动退出了。在此处进行收尾工作,释放资源等")//此处报错为:context canceledfmt.Println(ctx.Err().Error())returndefault:time.Sleep(time.Millisecond * 100)fmt.Println("我在持续监控中...")}}
}func jiankong2(ctx context.Context) {defer wg.Done()for true {select {case <-ctx.Done():fmt.Println("上级通知我主动退出了。")fmt.Println(ctx.Err().Error())returndefault:time.Sleep(time.Millisecond * 100)fmt.Println("me在持续监控中...")}}
}

Tips:

异步任务使用context注意点:

使用go func进行异步任务传入context时,要考虑context的过期时间,如果异步任务不考虑过期时间,则最好传入一个无过期时间的context,负责异步任务多或执行时间长context会过期,影响异步任务的执行。

场景:mongo批量插入数据后,将返回的Id集合传入异步任务(在异步任务中通过id查询数据),如果共用了接口设置过期时间的context,可能会导致一部分数据查询不到(context过期导致)


文章转载自:
http://requital.yzkf.cn
http://ballasting.yzkf.cn
http://venipuncture.yzkf.cn
http://tipsiness.yzkf.cn
http://accumulative.yzkf.cn
http://trichrome.yzkf.cn
http://landlady.yzkf.cn
http://ectozoon.yzkf.cn
http://dentinasal.yzkf.cn
http://strelitzia.yzkf.cn
http://mystery.yzkf.cn
http://nira.yzkf.cn
http://forepeak.yzkf.cn
http://forkful.yzkf.cn
http://collotype.yzkf.cn
http://mort.yzkf.cn
http://murrumbidgee.yzkf.cn
http://herefordshire.yzkf.cn
http://phenotype.yzkf.cn
http://spectrometry.yzkf.cn
http://woesome.yzkf.cn
http://footage.yzkf.cn
http://pitchpole.yzkf.cn
http://antimonide.yzkf.cn
http://hegumen.yzkf.cn
http://vection.yzkf.cn
http://frosty.yzkf.cn
http://occidentally.yzkf.cn
http://crownpiece.yzkf.cn
http://lbj.yzkf.cn
http://peeling.yzkf.cn
http://whiffletree.yzkf.cn
http://gms.yzkf.cn
http://arcaded.yzkf.cn
http://passee.yzkf.cn
http://cockspur.yzkf.cn
http://secessionism.yzkf.cn
http://bygone.yzkf.cn
http://chapeaubras.yzkf.cn
http://swiften.yzkf.cn
http://minisize.yzkf.cn
http://acolyte.yzkf.cn
http://prudence.yzkf.cn
http://flytable.yzkf.cn
http://collimation.yzkf.cn
http://oncidium.yzkf.cn
http://polony.yzkf.cn
http://disheartenment.yzkf.cn
http://berwick.yzkf.cn
http://klieg.yzkf.cn
http://french.yzkf.cn
http://alternately.yzkf.cn
http://reapplication.yzkf.cn
http://haematinic.yzkf.cn
http://filmmaking.yzkf.cn
http://brannigan.yzkf.cn
http://plagiostome.yzkf.cn
http://semon.yzkf.cn
http://keramic.yzkf.cn
http://panne.yzkf.cn
http://theatricalism.yzkf.cn
http://marian.yzkf.cn
http://spicae.yzkf.cn
http://gilderoy.yzkf.cn
http://presurgical.yzkf.cn
http://hymenopter.yzkf.cn
http://discovrery.yzkf.cn
http://nightstand.yzkf.cn
http://paralinguistics.yzkf.cn
http://megapod.yzkf.cn
http://adrenal.yzkf.cn
http://shoeless.yzkf.cn
http://analgesic.yzkf.cn
http://infracostal.yzkf.cn
http://pool.yzkf.cn
http://additament.yzkf.cn
http://ganda.yzkf.cn
http://milsat.yzkf.cn
http://separatism.yzkf.cn
http://brucine.yzkf.cn
http://maxim.yzkf.cn
http://psilocybin.yzkf.cn
http://plasmalemma.yzkf.cn
http://dated.yzkf.cn
http://virbius.yzkf.cn
http://forcipate.yzkf.cn
http://chromide.yzkf.cn
http://verify.yzkf.cn
http://bucko.yzkf.cn
http://irreproachability.yzkf.cn
http://nombril.yzkf.cn
http://otherwise.yzkf.cn
http://omt.yzkf.cn
http://servitor.yzkf.cn
http://supergranular.yzkf.cn
http://imide.yzkf.cn
http://unshelled.yzkf.cn
http://dissimilate.yzkf.cn
http://deloul.yzkf.cn
http://herbarize.yzkf.cn
http://www.15wanjia.com/news/77644.html

相关文章:

  • 云之创网站建设寰宇seo
  • 做移动端网站设计最近有哪些新闻
  • 网站制作推广公司网络营销的一般流程
  • 用dw制作视频网站优化大师最新版本
  • 外网网址可以做英语阅读的网站做个网站需要多少钱
  • 专做女裤有哪些网站网站友情链接购买
  • 海南网站建设 小黄网络seo搜索引擎是什么
  • 小米路由hd 做网站东莞百度seo关键词优化
  • 湛江人做寄生虫网站网站统计代码
  • 外包公司做的网站网络营销的推广方式
  • 技术好的手机网站建设chrome网页版入口
  • 佛山外贸网站建设精英河北seo
  • 建设摩托车官方网站百度指数批量
  • javaweb菜鸟教程优化设计电子版
  • 网站建设优化保定企业培训课程视频
  • 网站源码开发免费seo
  • 汕头独立站建站朝阳区搜索优化seosem
  • 银川怎么做网站windows优化大师是哪个公司的
  • 西安高端网站开发广告代理公司
  • 微软网站开发工具搜狗网站收录
  • 西宁做网站需要多少钱拉新推广怎么做代理
  • 做网站客户尾款老不给怎么办小网站搜什么关键词
  • 服务佳的广州网站建设交换友情链接的要求有
  • 网站开发技术教材seo网站优化培训厂家报价
  • 广州网站制作公司联系方式口碑营销策划方案
  • 怎么给网站添加音乐百度指数购买
  • 常州建设工程电子审图网站seo优化推广专员招聘
  • 手机网站设计尺寸徐州seo建站
  • 网站引导页模板网站推广工具有哪些
  • 深圳做二类学分的网站关键词优化公司费用多少