最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Go 并發(fā)

 更新時間:2020年09月03日 08:51:09   作者:百里江山  
這篇文章主要介紹了Go 并發(fā)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語言,感興趣的朋友可以了解下

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

串行執(zhí)行

  1. 時間復(fù)雜度為O(n^2)
  2. 不使用并發(fā)
  3. 結(jié)果執(zhí)行時間為 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í)行總時間:%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í)行總時間:9.0026338s

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

  1. 使用了協(xié)程組將O(n^2)降為O(n)
  2. 結(jié)果執(zhí)行時間為 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í)行總時間:%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í)行總時間:3.0013813s

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

  1. 使用嵌套協(xié)程組執(zhí)行并發(fā).
  2. 將O(n^2)降到O(1)
  3. 結(jié)果執(zhí)行時間為 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í)行總時間:%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í)行總時間:1.0023542s

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

相關(guān)文章

  • Golang操作excel的方法

    Golang操作excel的方法

    這篇文章主要介紹了Golang操作excel的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Golang標(biāo)準(zhǔn)庫unsafe源碼解讀

    Golang標(biāo)準(zhǔn)庫unsafe源碼解讀

    這篇文章主要為大家介紹了Golang標(biāo)準(zhǔn)庫unsafe源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go?Interface接口初學(xué)者手冊

    Go?Interface接口初學(xué)者手冊

    這篇文章主要為大家介紹了Go?Interface接口的基礎(chǔ)用法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語言如何使用 Viper 來管理配置

    Go語言如何使用 Viper 來管理配置

    在現(xiàn)代軟件開發(fā)中,良好的配置管理可以極大地提升應(yīng)用的靈活性和可維護性,下面我們就來看看GO語言中如何使用 Viper 來管理配置吧
    2024-11-11
  • golang flag包的使用教程

    golang flag包的使用教程

    golang 的 flag 包是用于處理命令行參數(shù)的工具包,我們可以基于這個包來開發(fā)自定義的命令行工具,下面小編就來為大家介紹一下flag包的具體使用吧
    2023-09-09
  • 淺析Go中原子操作的重要性與使用

    淺析Go中原子操作的重要性與使用

    這篇文章主要帶大家一起探索?Go?中原子操作的概念,了解為什么它們是重要的,以及如何有效地使用它們,文中的示例代碼講解詳細(xì),需要的可以了解下
    2023-11-11
  • Go語言中使用urfave/cli命令行框架

    Go語言中使用urfave/cli命令行框架

    這篇文章介紹了Go語言中使用urfave/cli命令行框架的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Golang并發(fā)編程之Channel詳解

    Golang并發(fā)編程之Channel詳解

    傳統(tǒng)的并發(fā)編程模型是基于線程和共享內(nèi)存的同步訪問控制的,共享數(shù)據(jù)受鎖的保護,使用線程安全的數(shù)據(jù)結(jié)構(gòu)會使得這更加容易。本文將詳細(xì)介紹Golang并發(fā)編程中的Channel,,需要的朋友可以參考下
    2023-05-05
  • 使用Go語言實現(xiàn)在項目中隱藏敏感信息

    使用Go語言實現(xiàn)在項目中隱藏敏感信息

    在開發(fā)項目是,用戶信息管理是一個非常常見的場景,特別是當(dāng)我們需要存儲和處理敏感信息時,本文主要介紹了如何使用Go語言實現(xiàn)隱藏敏感信息,需要的可以參考下
    2024-11-11
  • Go語言中函數(shù)可變參數(shù)(Variadic Parameter)詳解

    Go語言中函數(shù)可變參數(shù)(Variadic Parameter)詳解

    在Python中,在函數(shù)參數(shù)不確定數(shù)量的情況下,可以動態(tài)在函數(shù)內(nèi)獲取參數(shù)。在Go語言中,也有類似的實現(xiàn)方式,本文就來為大家詳細(xì)講解一下
    2022-07-07

最新評論

镇宁| 湖南省| 南丰县| 哈密市| 新平| 墨竹工卡县| 宕昌县| 迭部县| 漯河市| 东源县| 织金县| 宿松县| 天柱县| 双城市| 贵州省| 宾阳县| 轮台县| 侯马市| 辉县市| 清流县| 新化县| 周至县| 中超| 屯留县| 庐江县| 望奎县| 肇庆市| 庆安县| 阳城县| 舒城县| 德庆县| 贵溪市| 嫩江县| 鲁甸县| 公安县| 调兵山市| 灌阳县| 阳山县| 教育| 克什克腾旗| 芮城县|