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

网站里的图片切换怎么做大二网页设计作业成品

网站里的图片切换怎么做,大二网页设计作业成品,网站开发报价单 excel,建设网站中心引言 在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.dinnco.com/news/23742.html

相关文章:

  • 网站建设教程在线观看产品线上营销有哪些方式
  • wordpress如何开启小绿锁上海seo优化
  • 山东省建设厅举报网站长沙做引流推广的公司
  • 广州哪里做公司网站号百度文库官网登录入口
  • 济南手工网站建设公司西安网站建设公司电话
  • 公司的网站哪个部门做企业查询天眼查
  • 哪里做网站一套一百1+x网店运营推广
  • 山东网站建设哪家好免费seo工具大全
  • 网站开发demo网站快速排名优化价格
  • 做网站需要编程嘛长沙网站定制公司
  • 自学做网站要学什么seo免费诊断电话
  • 网站自身seo优化怎么做友情链接交换平台有哪些
  • 网站顶部地图代码怎么做的推广什么软件可以长期赚钱
  • 宝安做棋牌网站建设多少钱厦门谷歌seo
  • 做足彩推荐赚钱的网站2021搜索引擎排名
  • 对重庆电子政务网站建设评价长尾关键词是什么
  • 安徽招标网官网沧州网站推广优化
  • 佛山市外贸网站建设公司百度账户
  • 潘嘉严个人网站网络推广优化服务
  • 哈尔滨网站开发培训宁波seo优化报价多少
  • 职业医生继续做学分市哪个网站怎样在百度打广告
  • 网络公司网站建设规划论文收录网站
  • 龙岩古田seo电商运营是什么意思
  • 网站规划与建设重要性理解与体会百度词条优化
  • 微信小程序平台登录入口湖南网站seo公司
  • 灯网一家专门做灯的网站代码编程教学入门
  • 网站代码字体变大南宁推广公司
  • 西安市城乡建设管理局网站搜索引擎优化培训班
  • 12306网站做的好还是百度做的好关键词搜索工具好站网
  • 中国建设银行人力资源网站关键词查询