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

自己在网站开发的客户怎么联系网络技术培训

自己在网站开发的客户怎么联系,网络技术培训,做网站设计用什么软件最好,网站建设人员职责分布第二题: 创建一个生产器和接收器,再建立一个无缓冲的channel。生产器负责把数据放进管道里,接收器负责把管道里面的数据打印出来。这里我们开5个协程把数据打印出来。 直接上代码! package mainimport ("fmt" )func …

第二题:

创建一个生产器和接收器,再建立一个无缓冲的channel。生产器负责把数据放进管道里,接收器负责把管道里面的数据打印出来。这里我们开5个协程把数据打印出来。

直接上代码!

package mainimport ("fmt"
)func receive(c <-chan int) {/*for v := range c {fmt.Println("received:", v)}*/for i := 0; i <= 1; i++ {go func() {for v := range c {fmt.Println(v)}}()}
}
func generator() <-chan int {c := make(chan int)for i := 0; i <= 9; i++ {go func(i int) {for j := 0; j <= 9; j++ {temp := i*100 + 20 + jc <- temp}close(c)}(i)}return c
}
func main() {c := generator()receive(c)
}

埋了个小坑,跑上面的代码,在这里是不会有任何输出的。

87349339b46d4558b9a0c71f976ee5a4.png

原因是main函数结束时程序就退出了,没有给goroutine足够运行的时间来打印输出。

整个流程是并发执行的,main函数、generator的goroutine、receive的goroutine都是并发运行。

但是问题是main函数和generator很快就结束了,程序退出,receive的goroutine来不及打印数据。

解决方法就是让main函数等一等receive的goroutine。我们在main函数中加上一句:

time.Sleep(time.Second * 5) 

这时看到可以顺利输出了。

但是...

f0e9170ff1914f46baf6820c0b15c56c.png

但是却panic了。为什么呢?

因为generator()把消息发送到了关闭的管道。是因为生成器goroutine和接收goroutine的生命周期没有控制好导致的。

主要原因在于,接收的goroutine一旦从通道接收完所有的数据并退出,通道就会被关闭。

而此时,生成器goroutine可能还在向这个通道发送数据,于是产生了panic。

要避免这种情况,需要确保:

 

1、接收goroutine在最后一个生成器goroutine退出之前不能退出。

2、生成器goroutine在关闭通道之前,必须保证接收goroutine仍在运行。

 

问题出在生成器中close(c)这一行。这里每个goroutine都在自己完成后关闭了通道c。

按照程序逻辑,通道c应该在最后一个goroutine完成时关闭一次,而不是每个goroutine都关闭。所以应该只在主goroutine中关闭c。这里我们用WaitGroup来同步。

 

func generator() <-chan int {c := make(chan int) var wg sync.WaitGroupwg.Add(10) // 添加10个goroutinefor i := 0; i < 10; i++ {go func() {// 生成数据 wg.Done() // goroutine结束}()} go func() {wg.Wait()   // 等待所有goroutine完成close(c) // 关闭通道,仅关闭一次 }()return c 
}

 

顺利输出!!

e5ee8c796d6e454c9e30b504158688a3.png

 

 

http://www.khdw.cn/news/33005.html

相关文章:

  • 手机网站建设设计吉林seo技术交流
  • 网站流量统计实现十大少儿编程教育品牌
  • 沈阳市最新疫情seo应该怎么做
  • 互联网站建设维护需要做什么seo营销的概念
  • 武汉汉口做网站公司优化科技
  • 海南网站建设hnycbdgoogle seo 优化招聘
  • 网站建设作业指导书深圳seo优化电话
  • 用asp做网站上网帮助自己开网店怎么运营
  • 中国多少个省份31个省seo如何优化网站
  • 无锡市政建设集团有限公司网站高级seo是什么职位
  • 绿色家园网站怎么做信息如何优化上百度首页
  • 学校网站查询个人信息怎么去推广自己的公司
  • phpwind怎么做网站重庆关键词自然排名
  • 在哪家网站做推广好360免费建站教程
  • 造价工程师注册公示查询外贸seo推广招聘
  • 教育部专业申报建设 网站湛江seo
  • 建网站大概多少费用搜索网站关键词
  • 网站制作技术有哪些域名查询网
  • 男女激烈做羞羞事网站有哪些网站可以免费推广
  • 湖北建设网官方网站今日冯站长之家
  • 惠阳住房与规划建设局网站谷歌官方app下载
  • 微信web开发者工具下载seo云优化是什么意思
  • 品牌网站建设供应商武汉线上推广具体应该怎么做
  • 网站制作 流程怎样做网站的优化、排名
  • 加强政府门户网站建设方案西安网站建设公司电话
  • 网站开发的比较视频号推广方法
  • 软装设计效果图牛排seo系统
  • 网站设计服务费做什么费用百度站长平台怎么用
  • 手机网站建设公司google官网入口
  • 贵港网站制作站长工具关键词