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

主頁(yè) > 知識(shí)庫(kù) > 詳解Go 并發(fā)

詳解Go 并發(fā)

熱門(mén)標(biāo)簽:澳門(mén)防封電銷(xiāo)卡 福州鐵通自動(dòng)外呼系統(tǒng) 智能電銷(xiāo)機(jī)器人營(yíng)銷(xiāo) 地圖標(biāo)注測(cè)試 濮陽(yáng)自動(dòng)外呼系統(tǒng)代理 烏魯木齊人工電銷(xiāo)機(jī)器人系統(tǒng) 賺地圖標(biāo)注的錢(qián)犯法嗎 廣東語(yǔ)音外呼系統(tǒng)供應(yīng)商 長(zhǎng)沙ai機(jī)器人電銷(xiāo)

golang 天生語(yǔ)言層面支持并發(fā), 非常棒的語(yǔ)言, 有時(shí)我們業(yè)務(wù)開(kāi)發(fā)時(shí), 遇到復(fù)雜場(chǎng)景, 需要用于并發(fā), 將多個(gè)請(qǐng)求使用協(xié)程組完成并發(fā), 當(dāng)遇到嵌套循環(huán),還存在上下文關(guān)系需要改造為并發(fā)請(qǐng)求, 將之前的時(shí)間復(fù)雜度為O(n^2)改為O(n)的時(shí)間復(fù)雜度, 那是否還能否并時(shí)間復(fù)雜度進(jìn)一步降為O(1)呢? 就出現(xiàn)嵌套并發(fā). 具體如何嵌套并發(fā), 如何寫(xiě). 今天就一步一步分析.

串行執(zhí)行

  1. 時(shí)間復(fù)雜度為O(n^2)
  2. 不使用并發(fā)
  3. 結(jié)果執(zhí)行時(shí)間為 9s
// 串行執(zhí)行
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("串行執(zhí)行總時(shí)間:%s\n", time.Since(start))
}

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

執(zhí)行結(jié)果

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
串行執(zhí)行總時(shí)間:9.0026338s

單協(xié)程組并發(fā)

  1. 使用了協(xié)程組將O(n^2)降為O(n)
  2. 結(jié)果執(zhí)行時(shí)間為 3s
// 單并行執(zhí)行
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("單并行執(zhí)行總時(shí)間:%s\n", time.Since(start))
}
func abc(x, y int) {
	time.Sleep(time.Second * 1)
	fmt.Printf("x:%d, y:%d\n", x, y)
}

結(jié)果

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
單并行執(zhí)行總時(shí)間:3.0013813s

嵌套并發(fā)執(zhí)行

  1. 使用嵌套協(xié)程組執(zhí)行并發(fā).
  2. 將O(n^2)降到O(1)
  3. 結(jié)果執(zhí)行時(shí)間為 1s
// 嵌套執(zhí)行
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("嵌套并發(fā)執(zhí)行總時(shí)間:%s\n", time.Since(start))
}
func abc(x, y int) {
	time.Sleep(time.Second * 1)
	fmt.Printf("x:%d, y:%d\n", x, y)
}

結(jié)果

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
嵌套并發(fā)執(zhí)行總時(shí)間:1.0023542s

以上就是詳解Go 并發(fā)的詳細(xì)內(nèi)容,更多關(guān)于Go 并發(fā)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解Go多協(xié)程并發(fā)環(huán)境下的錯(cuò)誤處理
  • Django高并發(fā)負(fù)載均衡實(shí)現(xiàn)原理詳解
  • golang并發(fā)編程的實(shí)現(xiàn)
  • 一百行Golang代碼實(shí)現(xiàn)簡(jiǎn)單并發(fā)聊天室
  • 基于Django的樂(lè)觀鎖與悲觀鎖解決訂單并發(fā)問(wèn)題詳解
  • django解決訂單并發(fā)問(wèn)題【推薦】
  • golang并發(fā)ping主機(jī)的方法
  • golang并發(fā)下載多個(gè)文件的方法
  • Go并發(fā)調(diào)用的超時(shí)處理的方法

標(biāo)簽:德州 西雙版納 廣西 調(diào)研邀請(qǐng) 慶陽(yáng) 太原 貴陽(yáng) 阿克蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Go 并發(fā)》,本文關(guān)鍵詞  詳解,并發(fā),詳解,并發(fā),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Go 并發(fā)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于詳解Go 并發(fā)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 东阿县| 洮南市| 平湖市| 盐亭县| 澳门| 海南省| 应用必备| 阳谷县| 崇文区| 平阳县| 介休市| 肥西县| 乌鲁木齐市| 巩留县| 桂阳县| 新源县| 松原市| 临高县| 松原市| 赫章县| 娄烦县| 克东县| 绵阳市| 安顺市| 绥化市| 山东省| 新巴尔虎左旗| 鹿泉市| 卢湾区| 阿拉善左旗| 霍邱县| 扎鲁特旗| 东宁县| 基隆市| 屏南县| 滦南县| 永定县| 准格尔旗| 治县。| 阜平县| 巴里|