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

网站菜单怎么做企业网站建设需要多少钱

网站菜单怎么做,企业网站建设需要多少钱,wordpress注释插件,北京免费网站建设引言 在Golang中,因为协程执行的顺序是不固定的,如果不在代码里进行控制,可能就会导致预期外的输出。 本文通过分析一段代码的执行来介绍这种情况,以及可行的控制协程执行顺序的方法: sleep()waitGroup 实例分析 代…

引言

在Golang中,因为协程执行的顺序是不固定的,如果不在代码里进行控制,可能就会导致预期外的输出。
本文通过分析一段代码的执行来介绍这种情况,以及可行的控制协程执行顺序的方法:

  1. sleep()
  2. waitGroup

实例分析

代码

func NewRingBuffer(inCh, outCh chan int) *ringBuffer {return &ringBuffer{inCh:  inCh,outCh: outCh,}
}type ringBuffer struct {inCh  chan intoutCh chan int
}func (r *ringBuffer) Run() {for v := range r.inCh {select {case r.outCh <- v:default:<-r.outCh // pop one item from outchanr.outCh <- v}}close(r.outCh)
}func main() {inCh := make(chan int)outCh := make(chan int, 4)rb := pkg.NewRingBuffer(inCh, outCh)go rb.Run()for i := 0; i < 10; i++ {inCh <- i}close(inCh)//time.Sleep(time.Millisecond * 50)for res := range outCh {fmt.Println(res)}
}

上面代码的作用是,声明ringBuffer环状缓冲区;主协程往inCh写10个数的同时,有一个协程异步的读取数据,并写到outCh中;
outCh是一个4缓冲区大小的channel,如果outCh没满就直接写入,否则把outCh的首部元素移除再添加;
因此,预期输出应该是:6、7、8、9。
但实际的输出是:5、6、7、8、9。

分析

多出来的“5”,是因为协程的执行顺序不可控,当主协程执行到

for i := 0; i < 10; i++ {inCh <- i
}close(inCh)

时,此时outCh中是5、6、7、8;run协程还没有继续执行,就开始遍历outCh:

for res := range outCh {fmt.Println(res)
}

然后输出阻塞后,run协程才继续执行,把9写到outCh中,因此最后的输出结果是5、6、7、8、9.

解决办法

sleep()

使用sleep()函数,能让当前协程让出CPU,暂停执行一段时间。
对于这种方法,可以对上面函数进行如下改造:

close(inCh)
time.Sleep(time.Millisecond * 50)
// 新增
for res := range outCh {fmt.Println(res)
}

WaitGroup

使用waitGroup可以实现协程间通信,对于这段例子,通过wg保证run()函数执行完后,在对outCh进行输出。
改造方法如下:

func (r *ringBuffer) RunWithWg(wg *sync.WaitGroup) {defer wg.Done()for v := range r.inCh {select {case r.outCh <- v:default:<-r.outCh // pop one item from outchanr.outCh <- v}}close(r.outCh)
}func TestRaceWithWg(t *testing.T) {inCh := make(chan int)outCh := make(chan int, 4)rb := pkg.NewRingBuffer(inCh, outCh)var wg sync.WaitGroupwg.Add(1)go rb.RunWithWg(&wg)go func() {for i := 0; i < 10; i++ {inCh <- i}close(inCh)}()wg.Wait()for res := range outCh {fmt.Println(res)}
}
http://www.ds6.com.cn/news/77100.html

相关文章:

  • 响应式网站头部天津网站推广
  • 网站视频插件怎么做上海百度推广
  • 网站建设公司谁管针对百度关键词策划和seo的优化
  • 吉林省建设 安全 网站百度投放广告联系谁
  • seo网站排名后退线上销售渠道有哪些
  • 长沙手机网站制作百度竞价最低点击一次多少钱
  • 沈阳招标信息网seo超级外链工具免费
  • 男女做暧视频网站免费长沙自动seo
  • 外贸网站 建设百度指数功能有哪些
  • 七牛 wordpress 图床seo平台优化服务
  • 上海做兼职的网站搜索引擎营销成功的案例
  • 网站主机一个g宣传网站怎么做
  • 京东优惠劵网站怎么做长沙网站包年优化
  • 从信息化建设办公室网站搜外seo视频 网络营销免费视频课程
  • 连锁餐饮网站开发背景内容windows7优化大师官方下载
  • dedecms网站制作教程杭州搜索推广公司
  • 主题资源网站制作平台怎么制作小程序
  • 灰色行业做网站微信营销推广
  • 商务贸易网站建设如何搭建公司网站
  • wordpress主题带数据汕头seo优化项目
  • 设计素材网站特点市场调研数据网站
  • 宿州公司网站建设免费网络营销平台
  • 一起做网商网站怎么样优秀营销软文范例100字
  • 沧州网站推广免费人脉推广
  • 嘉兴公司的网站设计郑州seo网站关键词优化
  • java东莞网站建设价格免费b站推广网站详情
  • wordpress添加主题后怎么添加内容seo系统
  • 高中信息技术课网站怎么做排名优化外包公司
  • 小程序注册后如何注销二十条疫情优化措施
  • 青浦网站制作su35优化疫情二十条措施