GO 開發系列 基礎 Go 併發程式設計

2021-09-26 13:56:26 字數 2970 閱讀 8860

併發和並行說明

併發特點 :

並行特點 :

go 協程

說明 : 乙個 go 執行緒上可以起多個協程,協程可以理解為是輕量級的執行緒;

go 協程特點

go 併發原理(mpg 模型): 詳見部落格

示例**

package main

import (

"fmt"

"time"

)//向 intchan放入 1-8000 個數

func putnum(intchan chan int)

//關閉 intchan

//channel 關閉之後將不能再向其中寫入資料,

//但可以繼續讀取資料

close(intchan)

}// 從 intchan取出資料,並判斷是否為素數,如果是,就

// 放入到primechan

func primenum(intchan chan int, primechan chan int, exitchan chan bool)

flag = true //假設是素數

//判斷num是不是素數

for i := 2; i < num; i++

} if flag

} fmt.println("有乙個 primenum 協程因為取不到資料,退出")

//這裡我們還不能關閉 primechan

//向 exitchan 寫入 true

exitchan

}func main()

//這裡我們主線程,進行處理

go func()

end := time.now().unix()

fmt.println("使用協程耗時=", end-start)

//當我們從exitchan 取出了8個結果,就可以放心的關閉 primechan

close(primechan)

}()//遍歷我們的 primechan ,把結果取出

for

//將結果輸出

fmt.printf("素數=%d\n", res)

} fmt.println("main執行緒退出")

}

go goroutine 之間的通訊實現【3.1】channle 基本介紹【3.2】定義/宣告 channel【3.3】channel 的遍歷和關閉channel 的關閉

使用內建函式 close 可以關閉 channel, 當 channel 關閉後,便不能再向 channel 寫資料,但仍然可以從 channel 中讀取資料;

channel 的遍歷

channel 支援 for – range的方式進行遍歷

注意

【3.4】channel 使用細節和注意事項

示例**

package main

import (

"fmt"

)func main()

package main

import (

"fmt"

"time"

)//函式

func sayhello()

}//函式

func test()

}()//定義了乙個 map

//map 沒有 make

var mymap map[int]string

mymap[0] = "golang" //error

}func main()

}

package main

import (

"fmt"

"time"

)var (

intchan chan int

stringchan chan string

)func getintchan() chan int

func getstringchan() chan string

func main()

}()//2.定義乙個管道 5 個資料 string

stringchan = make(chan string, 5)

go func()

}()//傳統的方法在遍歷管道時,如果不關閉會阻塞而導致 deadlock

//問題,在實際開發中,可能我們不好確定什麼時候將關閉該管道.

//可以使用 select 方式可以解決

// label1:

for

}}

參考致謝本部落格為博主的學習實踐總結,並參考了眾多博主的博文,在此表示感謝,博主若有不足之處,請批評指正。

尚矽谷_韓順平_go語言核心程式設計

go併發原理

【golang】select關鍵字用法

從deadlock報錯理解go channel機制(一)

Go 併發程式設計

go語言宣揚用通訊的方式共享資料。go語言以獨特的併發程式設計模型傲視群雄,與併發程式設計關係最緊密的 包就是sync包,意思是同步。同步的用途有兩個,乙個是避免多個執行緒在同一時刻操作同乙個資料塊,另乙個是協調多個執行緒,以避免它們在同一時刻執行同一塊 由於這一的資料庫和 塊的背後都隱含著一種或多...

go併發程式設計

x ch 從ch中接收值並賦值給變數x ch 從ch中接收值,忽略結果關閉 我們通過呼叫內建的close函式來關閉通道。close ch 關於關閉通道需要注意的事情是,只有在通知接收方goroutine所有的資料都傳送完畢的時候才需要關閉通道。通道是可以被垃圾 機制 的,它和關閉檔案是不一樣的,在結...

Go語言程式設計基礎 併發 一 Go程 通道

go程 goroutine 是由go執行時管理的輕量級執行緒。啟動乙個go程並執行f x,y,z gof x,y,z package main import fmt time func fff s string func main 通道是帶有型別的管道,可以使用通道操作符 來傳送或接收值。將v傳送至...