package main

import (
"fmt"
"net/http"
"sync"
) /*
Go语言除了可以使用通道(channel)和互斥锁进行两个并发程序间的同步外,还可以使用等待组进行多个任务的同步
,等待组可以保证在并发环境中完成指定数量的任务 在sync.WaitGroup(等待组)类型中,每个sync.WaitGroup值在内部维护着一个计数,此计数的初始默认值为零
等待组有下面几个方法可用:
(wg *WaitGroup) Add(delta int)// 等待组的计数器加一
(wg *WaitGroup) Done() //等待组的计数器减一
(wg *WaitGroup) Wait() //当等待组计数器不等于0时阻塞,直到变0 对于一个可寻址的sync.WaitGroup值wg:
1.我们可以使用方法调用调用wg.Add(delta)来改变值wg维护的计数
2.方法调用wg.Done()和wg.Add(-1)是完全等价的
3.如果一个wg.Add(delta)或者wg.Done()调用将wg维护的计数更改为一个负数,一个恐慌将产生
4.当一个协程调用了wg.Wait()时,
如果此时wg维护的计数为零,则此wg.Wait()操作为一个空操作(noop)
否则(计数为一个正整数),则此协程将进入阻塞状态。当以后其他某个协程将此计数更改至零时(一般通过调用wg.Done()),
此协程将重新进入运行状态(即 wg.Wait()将返回)。 等待组内部拥有一个计数器,计数器的值可以通过方法调用实现计数器的增加和减少。当我们添加了 N 个并发任务进行工作时,就将等待组的计数器值增加 N。每个任务完成时,这个值减 1。
同时,在另外一个 goroutine 中等待这个等待组的计数器值为 0 时,表示所有任务已经完成。
*/ func main() {
//声明一个等待组
var wg sync.WaitGroup
//准备一系列的网站地址
//字符串切片
var urls = []string{
"http://www.github.com/",
"https://www.qiniu.com/",
"https://www.golangtc.com/",
}
//遍历这些地址
for _, url := range urls {
//每个任务开始时,将等待组增加
wg.Add(1)
//开启一个并发
//这里将 url 通过 goroutine 的参数进行传递,是为了避免 url 变量通过闭包放入匿名函数后又被修改的问题。
go func(url string) {
//使用defer,表示函数完成是将等待组的值减一
defer wg.Done()
//使用http访问提供的地址
//使用 http 包提供的 Get() 函数对 url 进行访问,Get() 函数会一直阻塞直到网站响应或者超时。
_, err := http.Get(url)
//访问完成后,打印地址可能发生的错误
if err != nil {
fmt.Println(url, err)
}
fmt.Println("fangwen", url)
}(url)
} //等待所有任务完成
wg.Wait()
fmt.Println("over")
}

每日一抄 Go语言等待组的更多相关文章

  1. Go语言协程并发---等待组sync.WaitGroup

    package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...

  2. Go同步等待组/互斥锁/读写锁

    1. 临界资源 package main import ( "fmt" "time" ) func main() { /* 临界资源: */ a := 1 go ...

  3. 算法笔记_216:第六届蓝桥杯软件类校赛部分真题(Java语言C组)

    目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学 ...

  4. 2017第八届蓝桥杯C/C++语言A组

    一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...

  5. 算法笔记_205:第五届蓝桥杯软件类决赛真题(C语言B组)

    目录 1 年龄巧合 2 出栈次序 3 信号匹配 4 生物芯片 5 Log大侠 6 殖民地   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 年龄巧合 小明和他的表弟一起去看电影,有人问他们的年龄. ...

  6. 算法笔记_204:第四届蓝桥杯软件类决赛真题(Java语言C组)

    目录 1 好好学习 2 埃及分数 3 金蝉素数 4 横向打印二叉树 5 危险系数 6 公式求值   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 好好学习 汤姆跟爷爷来中国旅游.一天,他帮助中国的 ...

  7. 算法笔记_119:蓝桥杯第六届省赛(Java语言A组)试题解答

     目录 1 熊怪吃核桃 2 星系炸弹 3 九数分三组 4 循环节长度 5 打印菱形 6 加法变乘法 7 牌型种数 8 移动距离 9 垒骰子 10 灾后重建   前言:以下试题解答代码部分仅供参考,若有 ...

  8. 算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答

     目录 1 三角形面积 2 立方变自身 3 三羊献瑞 4 九数组分数 5 饮料换购 6 生命之树   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 三角形面积 三角形 ...

  9. 算法笔记_122:蓝桥杯第七届省赛(Java语言A组)试题解答

     目录 1 煤球数目 2 生日蜡烛 3 搭积木 4 分小组 5 抽签 6 寒假作业 7 剪邮票 8 取球博弈 9 交换瓶子 10 压缩变换   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路 ...

  10. 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)

    目录 1 阶乘位数 2 凑平方数 3 棋子换位 4 机器人塔 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:10110001001 ...

随机推荐

  1. 【个人笔记】CentOS 修改 SSH 端口, 禁止 ROOT 远程登陆

    1. 修改 SSH 端口号, 禁止 ROOT 用户远程登录 # 使用ROOT用户或者其他有权限的用户登录 # 首先新建一个普通用户,避免禁用 ROOT 用户远程登陆后自己也无法登陆, 已有用户可以跳过 ...

  2. 创建maven项目时,IntelliJ IDEA2019出现:Unable to import maven project: See logs for details 报错

    开发环境:IntelliJ IDEA 2019.1.3 + Maven3.6.3 报错截图 主要原因 IntelliJ IDEA 2019.1.3 与 Maven3.6.3 不兼容问题 解决方案 将m ...

  3. windows文件夹被占用的解除办法

    1.第一步,按下快捷键组合 ctrl alt del,打开任务管理器窗口,点击上方菜单栏中的性能选项. 2. 第二步,在性能页面下找到打开资源监视器按钮并点击. 3. 第三步,进入资源监视器页面,点击 ...

  4. docker部署flask+uwsgi+nginx+postgresql,解耦拆分到多个容器,实现多容器互访

    本人承诺,本博客内容,亲测有效. dockerfile文件, FROM centos:7 RUN mkdir /opt/flask_app COPY ./show_data_from_jira /op ...

  5. WPS中VB编辑器的安装

    本来是因为要转换很多个文件的列的位置,他们格式一样,位置也一样,就是需要转换每个文件中列的位置,一个个操作又很麻烦,因此我在百度中发现了可以使用VBA进行操作,又由于excel里好像有VB编辑器,WP ...

  6. C# 窗口全屏、置顶、获取焦点

    很简单的几行代码 this.FormBorderStyle = FormBorderStyle.None; //设置窗体为无边框样式 this.WindowState = FormWindowStat ...

  7. MacBook + 移动SSD实现三系统(Mac OS、windows、ubuntu)

    Windows系统安装 1.我们先要在windows的电脑上下载好,你需要的windows镜像文件(下载地址:https://msdn.itellyou.cn/,个人建议用迅雷下载),下载好winto ...

  8. TP3.2.x判断手机端访问,同一个域名在PC和手机端展示不同模板(半独立式网站)

    首先介绍APP_STATUS内置常量,TP入口文件增加APP_STATUS 参数,  自动加载不同的项目配置文件,通过配置文件指向不同的模块 手机端访问时调用Wap手机模块,实现在手机端访问时展示出手 ...

  9. 【离线数仓】数据仓库DW图解

    整体框架 技术选型 数据流程图

  10. 「部署日记」Android Studio乱码解决方案

    弄了一台新电脑,第一件事肯定是弄好打造台啦 于是VS.AS.CRD.NSIS.Adobe全家桶全安装完毕, 问题来了,在打开Android Studio时,出现乱码,比如 这样的: 这样的: 这样的: ...