欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解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中的sync.Pool詳解

    深入Golang中的sync.Pool詳解

    這篇文章主要介紹了深入Golang中的sync.Pool詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • GoLang OS包以及File類型詳細(xì)講解

    GoLang OS包以及File類型詳細(xì)講解

    go中對文件和目錄的操作主要集中在os包中,下面對go中用到的對文件和目錄的操作,做一個總結(jié)筆記。在go中的文件和目錄涉及到兩種類型,一個是type File struct,另一個是type Fileinfo interface
    2023-03-03
  • 如何使用go-zero開發(fā)線上項目

    如何使用go-zero開發(fā)線上項目

    這篇文章主要介紹了如何使用go-zero開發(fā)線上項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 淺析Go項目中的依賴包管理與Go?Module常規(guī)操作

    淺析Go項目中的依賴包管理與Go?Module常規(guī)操作

    這篇文章主要為大家詳細(xì)介紹了Go項目中的依賴包管理與Go?Module常規(guī)操作,文中的示例代碼講解詳細(xì),對我們深入了解Go語言有一定的幫助,需要的可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Golang實現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解

    Golang實現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解

    在計算機(jī)科學(xué)中,stack(棧)是一種基本的數(shù)據(jù)結(jié)構(gòu),它是一種線性結(jié)構(gòu),具有后進(jìn)先出(Last In First Out)的特點。本文將通過Golang實現(xiàn)堆棧,需要的可以參考一下
    2023-04-04
  • Golang中的sync包的WaitGroup操作

    Golang中的sync包的WaitGroup操作

    這篇文章主要介紹了Golang中的sync包的WaitGroup操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang中json反序列化可能遇到的問題

    golang中json反序列化可能遇到的問題

    這篇文章主要給大家介紹了關(guān)于golang中json反序列化可能遇到的問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Go中過濾范型集合性能示例詳解

    Go中過濾范型集合性能示例詳解

    這篇文章主要為大家介紹了Go中過濾范型集合性能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • go zero微服務(wù)框架logx日志組件剖析

    go zero微服務(wù)框架logx日志組件剖析

    這篇文章主要為大家介紹了go zero微服務(wù)框架logx日志組件剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Go 1.13中errors包的新變化示例解析

    Go 1.13中errors包的新變化示例解析

    這篇文章主要為大家介紹了Go 1.13中errors包的新變化示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評論