新闻资讯

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻资讯列表

golang怎么控制并发数量,golang实现

发布时间:2023-10-26 14:39:45

golang怎样控制并发数量

在Go语言中,可使用goroutine和channel来控制并发数量。

首先,可使用goroutine来并发履行任务。例如,有一个任务列表,每一个任务是一个匿名函数,可使用以下代码并发履行这些任务:

tasks := []func(){}
// 填充任务列表...

concurrency := 10 // 并发数量
semaphore := make(chan struct{}, concurrency)

var wg sync.WaitGroup
for _, task := range tasks {
    wg.Add(1)
    go func(task func()) {
        defer wg.Done()
        semaphore <- struct{}{} // acquire semaphore
        task()
        <-semaphore // release semaphore
    }(task)
}

wg.Wait()

在上面的代码中,使用了一个带缓冲的channel作为信号量(semaphore),用于控制并发数量。首先创建一个带缓冲大小的channel,大小为并发数量,用于限制并发的goroutine数量。然后使用semaphore <- struct{}{}来获得信号量,表示可以履行任务。任务履行完后,使用<-semaphore释放信号量,表示任务履行完成。

另外,还可使用sync.WaitGroup来等待所有任务履行完成。在for循环中,使用wg.Add(1)来添加任务数量,然后在每一个goroutine中使用wg.Done()表示任务履行完成。最后使用wg.Wait()等待所有任务完成。

通过以上方式,可以控制并发数量,同时确保所有任务都被履行终了。