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

网站建设有名的公司wifi管理系统登录入口

网站建设有名的公司,wifi管理系统登录入口,宁波seo搜索平台推广专业,自适应式网站模板目录 关闭channel 引入 不关闭通道是有风险的#xff0c;主要存在两条#xff1a; 如何优雅的关闭#xff1f; 1.只有一个发送者 2.多个发送者 判断通道是否关闭 有缓存和无缓存的通道有什么区别#xff1f; 错误的关闭通道 关闭channel close(chan)#xff1a;关…目录 关闭channel 引入 不关闭通道是有风险的主要存在两条 如何优雅的关闭 1.只有一个发送者 2.多个发送者 判断通道是否关闭 有缓存和无缓存的通道有什么区别 错误的关闭通道 关闭channel close(chan)关闭通道并不会丢失里面的数据只是让读取通道数据的时候不会读完之后一直阻塞等待新数据写入。 引入 看一看下面的例子 ch : make(chan int, 1) ch - 11 // close(ch) // 如果不关闭下面会引发死锁// 通道没有关闭的时候会阻塞程序会永远等待从通道中接收值。而且由于没有其他goroutine来关闭通道这个阻塞状态将会持续下去从而引发死锁。 for v : range ch {fmt.Println(v) } 不关闭通道是有风险的主要存在两条 出现死锁如果通道不会再被使用但未关闭接收者可能会一直等待数据导致死锁或无意义的等待。出现资源泄漏未关闭的通道可能会导致资源泄漏因为垃圾收集器不会回收未关闭的通道。而且还要消耗电脑的性能来维护这条管道。 如何优雅的关闭 在关闭管道的时候我们要注意正确地决定何时关闭通道、确保通道不会被多次关闭。多次关闭同一个通道会报panic 1.只有一个发送者 如果只有一个发送者那么这个发送者在完成所有发送操作后可以直接关闭通道 package mainimport (fmttime )// 边入边出 func main() {c : make(chan int, 5)go fibonacci(10, c)for v : range c {fmt.Println(out:, time.Now())fmt.Println(v)} }// 应该由发送数据的一方关闭通道当数据发送完毕后就是关闭通道的时候。 func fibonacci(n int, c chan int) {x, y : 0, 1for i : 0; i n; i {c - xfmt.Println(in:, time.Now())time.Sleep(100)x, y y, xy}close(c) }// 大致运行结果 // in: 2024-07-16 16:00:34.637655 0800 CST m0.000171297 // out: 2024-07-16 16:00:34.637681 0800 CST m0.000197020 // in: 2024-07-16 16:00:34.637952 0800 CST m0.000467725 // 0 // in: 2024-07-16 16:00:34.637963 0800 CST m0.000478508 // out: 2024-07-16 16:00:34.637968 0800 CST m0.000483915 // 1 // in: 2024-07-16 16:00:34.637976 0800 CST m0.000491801 // in: 2024-07-16 16:00:34.637983 0800 CST m0.000499051 // out: 2024-07-16 16:00:34.637978 0800 CST m0.000494157 // 1 // out: 2024-07-16 16:00:34.637999 0800 CST m0.000514485 // 2 // out: 2024-07-16 16:00:34.638006 0800 CST m0.000522241 // 3 // out: 2024-07-16 16:00:34.638013 0800 CST m0.000528591 // 5 // in: 2024-07-16 16:00:34.637988 0800 CST m0.000504017 // in: 2024-07-16 16:00:34.638039 0800 CST m0.000555021 // in: 2024-07-16 16:00:34.638045 0800 CST m0.000561340 // in: 2024-07-16 16:00:34.638049 0800 CST m0.000564725 // in: 2024-07-16 16:00:34.638055 0800 CST m0.000570642 // out: 2024-07-16 16:00:34.638052 0800 CST m0.000568007 // 8 // out: 2024-07-16 16:00:34.638095 0800 CST m0.000610606 // 13 // out: 2024-07-16 16:00:34.638103 0800 CST m0.000619251 // 21 // out: 2024-07-16 16:00:34.63811 0800 CST m0.000626188 // 34 2.多个发送者 当有多个发送者时可以使用 sync.WaitGroup 来协调这些发送者并在所有发送者完成后由一个协程关闭通道 package mainimport (fmtsync )func main() {ch : make(chan string)var wg sync.WaitGroup// 启动3个协程发送数据for i : 1; i 5; i {wg.Add(1)go func(num int) {defer wg.Done()for j : a; j e; j {ch - fmt.Sprintf(协程%d:%c, num, j)}}(i)}// 启动一个协程来等待所有发送者完成并关闭通道go func() {wg.Wait()close(ch)}()// 接收数据for val : range ch {fmt.Println(val)}fmt.Println(通道已关闭结束接收) }判断通道是否关闭 v, ok : -ch 如果 ok 为 true表示成功从 channel 中接收到一个值并且 channel 还没有关闭。如果 ok 为 false表示 channel 已经关闭。 当一个 channel 已经关闭而且其中的元素已经全部被取出时再从管道中取出数据会返回该元素类型的零值并且 ok 会被设置为 false。这样的检查是为了防止在已关闭的 channel 上进行接收操作时引发 panic。因为在已关闭的 channel 上进行接收操作会立即返回零值但如果不进行检查可能会误认为是从 channel 中接收到了有效的数据。因此通过检查 ok我们可以确定是否成功接收到了有效的值。 c : make(chan int, 5)c - 1c - 2c - 3close(c)v1, ok : -cfmt.Println(v1, ok) // 1 truev1, ok -cfmt.Println(v1, ok) // 2 truev1, ok -cfmt.Println(v1, ok) // 3 truev1, ok -cfmt.Println(v1, ok) // 0 falsev1, ok -cfmt.Println(v1, ok) // 0 false 有缓存和无缓存的通道有什么区别 参考下面链接 golang channel有无缓冲区的区别 错误的关闭通道 错误一多次关闭同一个通道 c : make(chan int, 5)for i : 0; i 5; i {defer close(c) // 报panic同一个通道关闭了多次} 错误二资源泄漏 for i : 0; i 5; i {c : make(chan int, 5)defer close(c)} 看起来没有错误运行出来也没有错误。但是可能会导致资源泄漏因为每次循环迭代中创建的通道不会立即关闭导致内存和其他资源的泄漏。这五个管道的关闭时间都是在所在函数运行完毕的时候关闭的。而不是本次循环结束后就立刻关闭。
http://www.w-s-a.com/news/729580/

相关文章:

  • 软件下载网站怎么赚钱wordpress减少数据库查询
  • 什么兼职网站可以做视频剪辑常见的推广平台有哪些
  • 网站开发是用html还是jsp设迹官网
  • 查公司信息的网站怎么学wordpress
  • 白银做网站长春一般建一个网站需要多少钱
  • 帮人做钓鱼网站的人网络推广培训职业学校
  • 淘宝客有必须做网站吗网站开发的形式有( )
  • 网站建设:上海珍岛网页版qq空间登录
  • 网站服务器ipteahouse wordpress主题
  • 深州市住房保障和城乡建设局网站做网站公司叫什么
  • 织梦网站转跳手机站注册公司代理记账费用
  • wordpress建站Pdf亚马逊aws在线观看
  • 做网站的外包公司有哪些WordPress调用json数据
  • 做网站网站怎么赚钱网站的建设及维护报告
  • 可以做效果图的网站东莞网站优化什么方法
  • 网站和软件的区别怎么做招生网站
  • 雄安免费网站建设电话如何做网站推广 求指点
  • 十大免费cad网站入口软件北京做网站建设价格
  • 建设一个公司网站要具备什么网页制作的专业
  • 东莞seo建站排名全包网站
  • 网站建设的基本步骤有哪些软件商店下载官方
  • 网站建设开发报告论文hao123上网从这里开始官方
  • 阿里云建网站费用徐州房产网
  • 网站统计分析平台做企业礼品的网站
  • 做可视化图表的网站wordpress批量导入tag
  • txt怎么做网站网站的链接结构包括
  • 适合平面设计师的网站网络营销专员的就业前景
  • 好订单网服装加工接单谷歌seo网站推广怎么做
  • seo泛站群外贸网站建设团队
  • 网站免费维护建立网站国家城乡建设部投诉网站