go开启协程很简单,只需要:
go func()()
实战中我们会从数据库查找大量数据、for循环数据开启协程去处理数据会开启大量的协程、我们需要控制每次并发协程数量、防止服务器宕机
使用通道控制协程的并发度
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string,2)//设置缓冲通道、并发度为2
quit := make(chan bool)
var dealCount int = 0
cStr := []string{"hello","world","test","test2"}
count := 4
for _,item := range cStr {
ch1 <- item
go func(item string){
// 处理string
time.Sleep(time.Second * 2)
//并发阻塞测试确保一次最多2个同时进行
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(<-ch1)
dealCount++
if dealCount == count {
quit <- true
}
}(item)
}
<-quit
//输出结果
//2024-04-24 15:11:09
//hello
//2024-04-24 15:11:09
//world
//2024-04-24 15:11:11
//test
//2024-04-24 15:11:11
//test2
}
可见一次只输出两条数据,有效控制住了并发度