併發concurrency
很多人都是衝著go大肆宣揚的高併發而忍不住躍躍欲試,但其實從原始碼的解析來看,goroutine只是由官方實現的「執行緒池」而已。不過話說回來,每個例項4-5kb的棧記憶體占用和由於實現機制而大幅減少的建立和銷毀開銷,是製造go號稱高併發的根本原因。另外,goroutine的簡單易用,也在語言層面上給予了開發者巨大的便利。
併發不是並行:concurrency is not parallelism
併發主要有切換時間片來實現「同時」執行,在並行則是直接利用多核實現多執行緒的執行,但go可以設定使用核數,以發揮多核計算機的能力。
goroutine奉行通過通訊來共享記憶體,而不是共享記憶體來通訊。
/*乙個最最最最基本的goroutine*/
package main
import (
"fmt"
"time"
)func main()
func go() channel 是 goroutine溝通的橋梁,大都是阻塞同步的 通過make建立,close關閉 channel是引用型別 可以使用for range來迭代不斷操作channel 可以設定單項或雙向通道 可以設定快取大小,在被填滿前不會發生阻塞package main
import (
"fmt"
)func main() //當乙個核的時候還是按部就班的乙個執行緒乙個執行緒開始執行,可是現在變成多核以後,指不定先執行哪個後執行哪個,可能先執行i=5的,也可能先執行i=8的,即分配任務不定的特性
那麼如何解決這個問題呢?
解決方案1—-利用快取
package main
import (
"fmt"
"runtime"
)func main() //執行了10個執行緒
for i := 0; i < 10; i++
wg.add(10) //設定增加10個任務量
for i := 0; i < 10; i++
wg.wait() //在這裡要等待任務都完成
}func go(wg *sync.waitgroup, index int)
fmt.println(index, a)
wg.done() //標記一次done
}可處理乙個或多個channel的傳送與接收 同時又多個可用的channel的按隨機順序處理 可用空的select來阻塞main函式 可設定超時
select是go中的乙個控制結構,類似於用於通訊的switch語句。每個case必須是乙個通訊操作,要麼是傳送要麼是接收。
select隨機執行乙個可執行的case。如果沒有case可執行,它將阻塞,直到有case可執行。乙個預設的子句應該總是可執行的。
select 以下描述了 select 語句的語法:
每個case都必須是乙個通訊
所有channel表示式都會被求值
所有被傳送的表示式都會被求值
如果任意某個通訊可以進行,它就執行;其他被忽略。
如果有多個case都可以執行,select會隨機公平地選出乙個執行。其他不會執行。
否則: 1、如果有default子句,則執行該語句。
2、如果沒有default字句,select將阻塞,直到某個通訊可以執行;go不會重新對channel或值進行求值。例項
package main
import "fmt"
func main() {
var c1, c2, c3 chan int
var i1, i2 int
select {
case i1 =以上輸出結果如下:
no communication如何設定超時
//設定超時
package main
import (
"fmt"
"time"
)func main() {
c := make(chan bool)
select {
case v :=
第11課作業
第一題 三位數分解 include include 第11課作業 第一題 三位數分解,知識點 符號的使用 int main 第二題 分離浮點數的整數和小數部分 include include 第11課作業 第二題 分離整數和小數部分,知識點 不同資料型別的轉換,這裡只考慮小數點後有三位的情況 int...
第11課 邊框
邊框 border 可以有多種用途,比如作為裝飾元素或者作為劃分兩物的分界線。在設定邊框方面,css為你提供了無盡選擇。邊框寬度由css屬性border width定義,其值可以是 thin 薄 medium 普通 或 thick 厚 等,也可以是畫素值。如下圖所示 css屬性border colo...
第11課 Python字典
一.字典概述 1.字典的誕生 有時需要儲存具有對應關係的資料對,如使用者名稱和密碼,每個使用者名稱對應乙個密碼,這種資料用列表儲存比較麻煩,於是誕生了字典,其內部是很多值的無序集合,可以把乙個特定資料當做索引值進行索引。2.字典的格式 a 花括號 字典由左花括號開始,右花括號結束 鍵 字典中在冒號 ...