首页 > 其他分享 >Golang 中的 WaitGroups 指南

Golang 中的 WaitGroups 指南

时间:2022-09-29 11:56:42浏览次数:76  
标签:指南 WaitGroups 代码 goroutine Golang 计数器 等待 我们

Golang 中的 WaitGroups 指南

这个强大功能的简要说明

Photo by 谢苗鲍里索夫 on 不飞溅

Goroutines 是很好用的工具,但是它们有一个问题。在这篇文章中,我们将调查这个问题,我们将看到 WaitGroups 如何帮助我们解决这个问题。

我们将编写代码来抓取网站并记录它们的状态代码。

同步示例

当你运行下面的代码时,每个站点都会被一个一个地爬取。也就是说,要爬取github.com,代码需要等到medium.com爬完。它不是最佳代码。我们将利用 goroutines 使这段代码更快。

使用 goroutine

我们可以使用 goroutine 使代码更快。每个站点都会被异步爬取,因此代码不必等待medium.com被爬取来爬取github.com。

当您运行下面的代码时,您将创建四个新的 goroutine。但是当你运行这段代码时,你不会看到任何输出,因为你创建了 15 到 17 行 goroutines。然后主函数退出,因此进程被销毁,因此您的所有 goroutine 在完成工作之前都被销毁,因为主 goroutine 不知道它需要等待其他 goroutine 完成。

等待组帮助

一个 等待组 等待 goroutine 完成。让我们逐行检查代码,看看发生了什么。

  • 第 17 行——我们说我们有四个 goroutines 等待,所以 等待组 将使计数器增加 4 . (我们说四个 goroutine 是因为我们已经知道要抓取四个网站,我们将为每个网站创建一个 goroutine。)
  • 第 19 行——我们为每个要爬取的网站启动一个新的 goroutine。
  • 第 20 行——我们给我们的反馈 等待组 goroutine 完成了。所以它将计数器减一。
  • 第 24 行——这一行阻塞了主 goroutine,直到四个 goroutine 中的每一个都说它们完成了。它阻塞直到计数器变为零,然后主函数存在。

如果计数器没有变为零, _wg.Wait 块_ 将永远持续下去。
如果计数器变为负数,它会恐慌。

通过指针

如果您需要转机 等待组 例如,您需要通过指针传递它。否则,它将复制我们在第 10 行创建的实例,所以当我们说 wg.完成 在第 25 行。它不会减少实例的计数器 wg.等待 等待。所以第 10 行实例的计数器将保持不变 4 所以 wg.等待 将永远阻止它,并且计数器仍然存在 4 .

感谢您的阅读。请继续关注更多。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/39828/43012911

标签:指南,WaitGroups,代码,goroutine,Golang,计数器,等待,我们
From: https://www.cnblogs.com/amboke/p/16740940.html

相关文章

  • Golang Redis有序集合(sorted set)
    Redis有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,这个分数主要用于集合元素排序。引用git......
  • 我希望拥有的 Typescript 指南 — 阅读错误,第 1 部分
    我希望拥有的Typescript指南—阅读错误,第1部分通过视觉指南和简单的语言学习如何阅读Typescript中的错误Typescript可能充斥着错误和警告,似乎是每一件小事。以......
  • Linux 网络编程—— libnet 使用指南
    概述​​通过《原始套接字实例:发送UDP数据包》的学习​​,我们组UDP数据包时常考虑字节流顺序、校验和计算等问题,有时候会比较繁琐,那么,有没有一种更简单的方法呢?答案是:借......
  • golang之Time时间函数
    总结常用time包下的方法1)获取前一天的时间packagemainimport"time"nowTime:=time.Now()yesterdayTime:=nowTime.AddDate(0,0,-1);//年,月,日获取前一......
  • golang 的双向循环链表
                如下为go实现的双向循环列表。packagemainimport("fmt")typeRingstruct{prev,......
  • Salesforce自动化指南:Flow常见的限制和重要的概念都在这里!
     如果你想将SalesforceFlow技能提升到一个新水平,必须要了解Flow中重要的概念和常见的限制。  Flow中的重要概念 01为什么会有限制? Salesforce是一个多租户......
  • 实战指南 | Serverless 架构下的应用开发
    简介: 基于Serverless架构的应用开发流程将会比基于传统架构的应用开发更简单。在Serverless架构下进行应用开发,用户通常只需要按照规范编写代码、构建产物,然后部署到......
  • 《MiniPRO H750开发指南》第四十六章 FATFS实验
    第三十六章QSPI实验​本章,我们将介绍STM32H750的QSPI功能,并使用STM32H750自带的QSPI来实现对外部NORFLASH的读写,并将结果显示在LCD模块上。​本章分为如下几个小节:​36.1......
  • 如何学习ReactJS:初学者完整指南
    英文| https://www.geeksforgeeks.org/how-to-learn-reactjs-a-complete-guide-for-beginners/?ref=rp翻译 |web前端开发(ID:web_qdkf)每个前端开发人员和Web开发人员都知......
  • 《MiniPRO H750开发指南》第四十五章 SD卡实验
    第三十五章IIC实验​本章,我们将介绍如何使用STM32H750的普通IO口模拟IIC时序,并实现和24C02之间的双向通信,并把结果显示在TFTLCD模块上​本章分为如下几个小节:​35.1IIC及2......