返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言中goroutine和WaitGroup的使用示例详解
  • 185
分享到

Go语言中goroutine和WaitGroup的使用示例详解

gogoroutine和WaitGroup使用gogoroutine和WaitGroup 2023-03-03 14:03:27 185人浏览 薄情痞子
摘要

目录Go语言中goroutine和WaitGroup的使用介绍例子扩展:Go的goroutine与sync.WaitGroup的初步使用Go语言中goroutine和WaitGrou

Go语言中goroutine和WaitGroup的使用

介绍

goroutine 是Go中一个轻量级的线程, 只需要一个go关键字就可以创建一个goroutine
WaitGroup则是用于多个goroutine 协作的时候使用, 可以指定多个goroutine 一起完成指定动作之后执行对应的逻辑。
例如:100M赛跑,要等所有的运动员都就位,才能发令开始, 这个类似于Java中的countDownlatch

例子

package main

import (
	"fmt"
	"math/rand"
	"strconv"
	"sync"
	"time"
)

func main() {
	// 随机数种子
	rand.Seed(time.Now().Unix())
	// 生命WaitGroup, 指定五个
	var wait sync.WaitGroup
	wait.Add(5)
	for i := 0; i < 5; i++ {
		i := i
		go func() {
			waitTime := rand.Intn(10)
			time.Sleep(time.Duration(waitTime) * time.Second)
			fmt.Println("I'm " + strconv.Itoa(i) + ". sleep" + strconv.Itoa(waitTime))
			// 表示准备好了
			wait.Done()
		}()
	}
	fmt.Println("Wait  start")
	// 等待所有人准备好
	wait.Wait()
	fmt.Println("All  start")
}

以上程序输出结果

Wait  start
I'm 3. sleep1
I'm 1. sleep2
I'm 2. sleep3
I'm 4. sleep4
I'm 0. sleep8
All  start

会在wait.Wait()处卡住,等待执行了五次wait.Done() ,才放行。

扩展:Go的goroutine与sync.WaitGroup的初步使用

goroutine的使用以及sync.WaitGroup

emmm,没啥好介绍的,就简单的使用。

package main

import (
    "fmt"
    "sync"
)

//协程计数器
var wg sync.WaitGroup

func main() {
    fmt.Println("嘻嘻")

    for i := 0; i < 5; i++ {
        wg.Add(1)//协程计数器加1
        go func(x int) {
            defer wg.Done()// 协程计数器减1
            fmt.Println(x)
        }(i)
    }

    wg.Wait()// 等待所有的协程执行完毕
    fmt.Println("主线程退出")
}

到此这篇关于Go语言中goroutine和WaitGroup的使用的文章就介绍到这了,更多相关go goroutine和WaitGroup的使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言中goroutine和WaitGroup的使用示例详解

本文链接: https://lsjlt.com/news/198397.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go语言中goroutine和WaitGroup的使用示例详解
    目录Go语言中goroutine和WaitGroup的使用介绍例子扩展:Go的goroutine与sync.WaitGroup的初步使用Go语言中goroutine和WaitGrou...
    99+
    2023-03-03
    go goroutine和WaitGroup使用 go goroutine和WaitGroup
  • Go语言中goroutine和WaitGroup如何使用
    本篇内容主要讲解“Go语言中goroutine和WaitGroup如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言中goroutine和WaitGroup如何使用”吧!Go语言中g...
    99+
    2023-07-05
  • Go语言学习教程之goroutine和通道的示例详解
    目录goroutine通道Range 和 CloseSelect官方留的两道练习题等价的二叉树网络爬虫源码地址goroutine goroutine是由Go运行时管理的轻量级线程。 ...
    99+
    2024-04-02
  • Go语言通过WaitGroup实现控制并发的示例详解
    目录与Channel区别基本使用示例完整代码特别提示多任务示例完整代码与Channel区别 Channel能够很好的帮助我们控制并发,但是在开发习惯上与显示的表达不太相同,所以在Go...
    99+
    2023-01-30
    Go语言 WaitGroup控制并发 Go语言 WaitGroup
  • Go语言中的Goroutine和channel怎么使用
    这篇“Go语言中的Goroutine和channel怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言中的Gor...
    99+
    2023-07-05
  • Go语言中循环语句使用的示例详解
    目录一、概述1. 循环控制语句2. 无限循环二、Go 语言 for 循环1. 语法2. for语句执行过程3. 示例4. For-each range 循环三、循环嵌套1. 语法2....
    99+
    2024-04-02
  • Go语言学习之WaitGroup用法详解
    目录前言小试牛刀总览底层实现结构体AddDoneWait易错点总结前言 在前面的文章中,我们使用过 WaitGroup 进行任务编排,Go语言中的 ...
    99+
    2022-06-11
    GO 学习 go语言
  • Go语言的WaitGroup怎么使用
    本篇内容介绍了“Go语言的WaitGroup怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!小试牛刀我们先来个简单的例子,看下&nbs...
    99+
    2023-07-02
  • Go中Waitgroup和锁的示例分析
    这篇文章给大家分享的是有关Go中Waitgroup和锁的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。学 Go 的时候知道 Go 语言支持并发,最简单的方法是通过 go 关键字开启 goroutine 即...
    99+
    2023-06-15
  • go语言reflect.Type 和 reflect.Value 应用示例详解
    目录一、使用 reflect.Type 创建实例二、使用 reflect.Value 调用函数一、使用 reflect.Type 创建实例 在通过 reflect.TypeOf 函数...
    99+
    2024-04-02
  • 详解Go语言中Goroutine退出机制的原理及使用
    目录退出方式进程/main函数退出通过channel退出通过context退出通过Panic退出等待自己退出阻止goroutine退出的方法通过sync.WaitGroup通过cha...
    99+
    2024-04-02
  • Go WaitGroup的使用方式及实例详解
    WaitGroup 是 Go 语言的一个并发控制机制,它可以用于等待一组 goroutine 的结束。WaitGroup 提供了三个...
    99+
    2023-10-12
    Go语言
  • 初探Go语言中的Goroutine和channel
    本篇文章带大家初步了解Go语言中的Goroutine和channel,希望对大家有所帮助!Go 语言的 CSP 并发模型的实现包含两个主要组成部分:一个是 Goroutine,另一个是 channel。本文将会介绍它们的基本用法和注意事项。...
    99+
    2023-05-14
    go语言 Golang
  • Rust语言中的String和HashMap使用示例详解
    目录String新建字符串更新字符串使用 + 运算符或 format! 宏拼接字符串索引字符串字符串 slice遍历字符串HashMap新建 HashMapHashMap 和 own...
    99+
    2022-11-13
    Rust String HashMap使用 Rust String HashMap
  • Go语言使用对称加密的示例详解
    目录介绍AES 算法实践总结介绍 在项目开发中,我们经常会遇到需要使用对称密钥加密的场景,比如客户端调用接口时,参数包含手机号、身份证号或银行卡号等。 对称密钥加密是一种加密方...
    99+
    2022-06-07
    加密 GO 示例 go语言
  • Go语言基础go install命令使用示例详解
    目录go install一、使用二、包名和目录名的关系三、注意 go install 编译并安装代码包,对于库,会生成目标库文件,并且放置到GOPATH/pgk目录下。 对于可执文件...
    99+
    2024-04-02
  • Go语言基础go fmt命令使用示例详解
    go fmt 命令主要是用来帮你格式化所写好的代码文件【很多第三方集成软件都是使用了go fmt命令】 一、使用: go fmt <文件名>.go 使用go fmt命令...
    99+
    2024-04-02
  • Go语言使用goroutine及通道实现并发详解
    目录使用通道接收数据阻塞接收数据非阻塞接收数据接收任意数据,忽略掉接收的数据循环接收数据使用通道接收数据 在上一篇文章中介绍了通道以及使用通道发送数据,本篇接着了解通道的基本内容,如...
    99+
    2024-04-02
  • Go语言中并发goroutine底层原理的示例分析
    小编给大家分享一下Go语言中并发goroutine底层原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、基本概念①并发、并行区分1.概念并发:同一时间段内一个对象执行多个任务,充分利用时间并行:同一时刻,多个...
    99+
    2023-06-29
  • Go语言单例模式示例详解
    目录简单单例模式加锁的单例模式双check 的单例模式sync.Once 的单例模式简单单例模式 单例模式是创建类型的模式,它是为了保证执行期间内只有一个实例。使用 Golang 指...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作