教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go语言中控制并发数量的方法

go语言中控制并发数量的方法

发布时间:2022-02-14   编辑:jiaochengji.com
教程集为您提供go语言中控制并发数量的方法等资源,欢迎您收藏本站,我们将为您提供最新的go语言中控制并发数量的方法资源

因为go语言层面支持并发,所以面试中经常会问到并发的问题,比如说控制go并发数量的方式有哪些?

下面是我个人整理的两个例子:

<blockquote>

func waitGroup() {

count := 10

wg := sync.WaitGroup{}

for i := 0; i < count; i  {

wg.Add(1)

go func(j int) {

fmt.Print(j)

wg.Done() // 也可使用 wg.Add(-1)

}(i)

}

wg.Wait()

}

</blockquote>

上面主要用到的是go中sync包下的waitGroup,这也是在工作中比较常见的实现方式,关键点就是把握好Add方法的位置,Wait方法则是等待所有的协程执行完毕

<blockquote>

func channel() {

count := 10 // 最大支持并发

sum := 100 // 任务总数

c := make(chan struct{}, count) // 控制任务并发的chan

sc := make(chan struct{}, sum) // 控制任务总数的chan

defer close(c)

defer close(sc)

for i:=0; i

c <- struct{}{} // 作用类似于waitgroup.Add(1)

go func(j int) {

fmt.Println(j)

<- c // 执行完毕,释放资源

sc <- struct {}{} // 记录到执行总数里

}(i)

}

for i:=sum; i>0;i-- {

<- sc

}

}

</blockquote>

上面的例子用到的是go中的channel,利用channel阻塞的特性和带缓冲的channel来实现控制并发数量,其中sc这个channel是可以去掉的,例子里用只是为了防止主程序退出之后,没有全部输出,正常工作中,程序一般都是阻塞式的,所以可以去掉。

本文来自php中文网的golang教程栏目:https://www.php.cn/be/go/

到此这篇关于“go语言中控制并发数量的方法”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Go语言发展历史、核心、特性及学习路线
[Go学习] 并发控制之WaitGroup计数信号量
想系统学习GO语言(Golang
Go语言学习3----Go语言特色
从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
go语言和python哪个难
Go 语言十年而立,Go2 蓄势待发
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
Go Base
【Golang】01 Go 语言初识

[关闭]
~ ~