Go 併發執行

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 項執行完畢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章