婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Go 并發

詳解Go 并發

熱門標簽:澳門防封電銷卡 福州鐵通自動外呼系統 智能電銷機器人營銷 地圖標注測試 濮陽自動外呼系統代理 烏魯木齊人工電銷機器人系統 賺地圖標注的錢犯法嗎 廣東語音外呼系統供應商 長沙ai機器人電銷

golang 天生語言層面支持并發, 非常棒的語言, 有時我們業務開發時, 遇到復雜場景, 需要用于并發, 將多個請求使用協程組完成并發, 當遇到嵌套循環,還存在上下文關系需要改造為并發請求, 將之前的時間復雜度為O(n^2)改為O(n)的時間復雜度, 那是否還能否并時間復雜度進一步降為O(1)呢? 就出現嵌套并發. 具體如何嵌套并發, 如何寫. 今天就一步一步分析.

串行執行

  1. 時間復雜度為O(n^2)
  2. 不使用并發
  3. 結果執行時間為 9s
// 串行執行
func SerializeRun() {
	start := time.Now()
	xx := []int{1, 2, 3}
	yy := []int{100, 200, 300}
	for _, x := range xx {
		for _, y := range yy {
			abc(x, y)
		}
	}
	fmt.Printf("串行執行總時間:%s\n", time.Since(start))
}

func abc(x, y int) {
	time.Sleep(time.Second * 1)
	fmt.Printf("x:%d, y:%d\n", x, y)
}

執行結果

x:1, y:100
x:1, y:200
x:1, y:300
x:2, y:100
x:2, y:200
x:2, y:300
x:3, y:100
x:3, y:200
x:3, y:300
串行執行總時間:9.0026338s

單協程組并發

  1. 使用了協程組將O(n^2)降為O(n)
  2. 結果執行時間為 3s
// 單并行執行
func SingleConcurrenceRun() {
	start := time.Now()
	xx := []int{1, 2, 3}
	yy := []int{100, 200, 300}
	for _, x := range xx {
		wgg := sync.WaitGroup{}
		for _, y := range yy {
			wgg.Add(1)
			go func(x, y int) {
				defer wgg.Done()
				abc(x, y)
			}(x, y)
		}
		wgg.Wait()
	}
	fmt.Printf("單并行執行總時間:%s\n", time.Since(start))
}
func abc(x, y int) {
	time.Sleep(time.Second * 1)
	fmt.Printf("x:%d, y:%d\n", x, y)
}

結果

x:1, y:300
x:1, y:200
x:1, y:100
x:2, y:100
x:2, y:200
x:2, y:300
x:3, y:300
x:3, y:100
x:3, y:200
單并行執行總時間:3.0013813s

嵌套并發執行

  1. 使用嵌套協程組執行并發.
  2. 將O(n^2)降到O(1)
  3. 結果執行時間為 1s
// 嵌套執行
func NestConcurrenceRun() {
	xx := []int{1, 2, 3}
	yy := []int{100, 200, 300}
	start := time.Now()
	wgg := sync.WaitGroup{}
	for _, x := range xx {
		wgg.Add(1)
		go func(x int) {
			wg := sync.WaitGroup{}
			for _, y := range yy {
				wg.Add(1)
				go func(x, y int) {
					defer wg.Done()
					abc(x, y)
				}(x, y)
			}
			wg.Wait()
			wgg.Done()
		}(x)
	}
	wgg.Wait()
	fmt.Printf("嵌套并發執行總時間:%s\n", time.Since(start))
}
func abc(x, y int) {
	time.Sleep(time.Second * 1)
	fmt.Printf("x:%d, y:%d\n", x, y)
}

結果

x:1, y:200
x:3, y:300
x:3, y:200
x:1, y:300
x:2, y:200
x:1, y:100
x:2, y:300
x:2, y:100
x:3, y:100
嵌套并發執行總時間:1.0023542s

以上就是詳解Go 并發的詳細內容,更多關于Go 并發的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 詳解Go多協程并發環境下的錯誤處理
  • Django高并發負載均衡實現原理詳解
  • golang并發編程的實現
  • 一百行Golang代碼實現簡單并發聊天室
  • 基于Django的樂觀鎖與悲觀鎖解決訂單并發問題詳解
  • django解決訂單并發問題【推薦】
  • golang并發ping主機的方法
  • golang并發下載多個文件的方法
  • Go并發調用的超時處理的方法

標簽:德州 西雙版納 廣西 調研邀請 慶陽 太原 貴陽 阿克蘇

巨人網絡通訊聲明:本文標題《詳解Go 并發》,本文關鍵詞  詳解,并發,詳解,并發,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Go 并發》相關的同類信息!
  • 本頁收集關于詳解Go 并發的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 壶关县| 繁昌县| 永年县| 泰和县| 舟曲县| 汉源县| 彝良县| 岗巴县| 香河县| 罗城| 玉环县| 谷城县| 亳州市| 安丘市| 新昌县| 台东市| 谢通门县| 泰安市| 青川县| 抚州市| 富源县| 卢湾区| 康乐县| 湘潭市| 普格县| 葫芦岛市| 黄大仙区| 石河子市| 五常市| 德阳市| 宕昌县| 额尔古纳市| 辉南县| 和田县| 乐至县| 襄汾县| 泰州市| 曲阳县| 桐庐县| 济南市| 和田县|