併發和並行說明
併發特點 :
並行特點 :
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傳送至...