Go 并发执行
需要并发执行的场景有很多:爬虫、拉取数据、更新数据…
Go作为天生高并发的语言,在使用并发时是比较方便的。
Demo案例
package main
import (
"fmt"
)
func main() {
ConcurrentWork(5, func() {
// ...业务逻辑
fmt.Println("https://blog.csdn.net/LitongZero")
})
}
/**
* @Description: 开启多线程执行
* @param total 启动线程数
* @param work 需要执行的方法
*/
func ConcurrentWork(total int, work func()) {
c := make(chan int) //设置多线程通道
// 循环创建线程
for i := 0; i <= total; i++ {
go doMyWork(i, c, work)
}
// 等待所有线程结束
for i := 0; i <= total; i++ {
fmt.Printf("第 %d 项执行完毕\n", <-c)
}
}
func doMyWork(i int, page chan int,work func()) {
fmt.Printf("第 %d 项正在执行\n", i)
work()
// 返回执行完毕
page <- i
}
也可以把work func()
参数去除,直接在doMyWork
方法中调用业务逻辑。
运行结果
第 0 项正在执行
第 2 项正在执行
https://blog.csdn.net/LitongZero
第 0 项执行完毕
第 1 项正在执行
https://blog.csdn.net/LitongZero
第 1 项执行完毕
第 3 项正在执行
https://blog.csdn.net/LitongZero
https://blog.csdn.net/LitongZero
第 5 项正在执行
https://blog.csdn.net/LitongZero
第 2 项执行完毕
第 3 项执行完毕
第 5 项执行完毕
第 4 项正在执行
https://blog.csdn.net/LitongZero
第 4 项执行完毕