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 項執行完畢