Go 3 Go語言的併發

2021-10-10 23:42:57 字數 2479 閱讀 7030

go 程(goroutine)是由 go 執行時管理的輕量級執行緒,使用方式:

package main

import (

"fmt"

"time"

)func say(s string)

}func main()

結果:

go routine say world

normal hello

normal hello

go routine say world

normal hello

go routine say world

normal hello

go routine say world

normal hello

通道方式

package main

import (

"fmt"

)func main()

c := make(chan int)

//累加 7+2+8 = 17

go sum(s[:len(s)/2], c)

//累加 -9+4+0 = -5

go sum(s[len(s)/2:], c)

// 從 c 中接收。第乙個引數給x第二個引數給y

// x -5 y 17

x, y := <-c, <-c

fmt.println(x, y, x+y)

}func sum(s int, c chan int)

c <- sum // 將和送入 c

}

結果

-5 17 12
帶緩衝的通道

package main

import (

"fmt"

)func main()

//結果:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:

main.main()

d:/go_workspaces/twh/thread.go:43 +0xa3

package main

import (

"fmt"

)func main()

//結果

12

通道的關閉和範圍

package main

import (

"fmt"

)func fillchannel(n int, c chan int)

close(c)

}func main()

}// 結果

放入x: 0 ,y: 1 ,x+y: 1

放入x: 1 ,y: 1 ,x+y: 2

放入x: 1 ,y: 2 ,x+y: 3

放入x: 2 ,y: 3 ,x+y: 5

放入x: 3 ,y: 5 ,x+y: 8

放入x: 5 ,y: 8 ,x+y: 13

放入x: 8 ,y: 13 ,x+y: 21

放入x: 13 ,y: 21 ,x+y: 34

放入x: 21 ,y: 34 ,x+y: 55

放入x: 34 ,y: 55 ,x+y: 8901

1235

8132134

package main

import (

"fmt"

)func selecttest(channel, quit chan int) }}

func main()

quit <- 0

}()selecttest(channel, quit)

}//結果

0往channel推資料x: 0 ;臨時值y和x+y 1 1

往channel推資料x: 1 ;臨時值y和x+y 1 211

往channel推資料x: 1 ;臨時值y和x+y 2 3

往channel推資料x: 2 ;臨時值y和x+y 3 523

往channel推資料x: 3 ;臨時值y和x+y 5 8

往channel推資料x: 5 ;臨時值y和x+y 8 1358

往channel推資料x: 8 ;臨時值y和x+y 13 21

往channel推資料x: 13 ;臨時值y和x+y 21 34

1321

往channel推資料x: 21 ;臨時值y和x+y 34 55

預設執行器

package main

import (

"fmt"

"time"

)func main() }}

//結果

..100毫秒...100毫秒...100毫秒...100毫秒...500毫秒-boom!!

Go語言併發

協程 本質上是一種使用者態執行緒,不需要作業系統來進行搶占式排程,且在真正的實現重寄存於執行緒中,因此,系統開銷極小,可以有效提高執行緒的任務併發性,從而避免多執行緒的缺點。使用協程的優點是程式設計簡單,結構清晰 缺點是需要語言的支援。協程最大優勢 輕量級 可以輕鬆建立上百萬個而不會導致系統資源衰竭...

Go語言 併發篇

go語言 併發篇 2012 06 06 09 55 by 軒脈刃,當被問到為什麼用go語言,一定不得不提的是go語言的併發程式編寫。在c語言中編寫非常繁瑣複雜的併發程式在go語言中總是顯得如此便捷。go中併發程式依靠的是兩個 goroutine和channel 對於初學者,goroutine直接理解...

Go語言基礎 併發

並行 多件事在同一時刻發生。併發 多件事在同一時間間隔發生。摘自 和 concurrent and parallel programming 上文如果用程式設計師的語言來講,cpu處理器相當於上圖的咖啡機的角色,任務相當於佇列中的人。一定要仔細閱讀此文 這篇文章提到了網路伺服器併發連線數 吐吞量 寬...