Golang零碎筆記-2

 

1.主協程(main協程)退出後,子協程會相繼退出,這個是若是主協程不阻塞看不到子協程打印結果的緣由。web

2.runtime.Goexit()函數用於終止當前 goroutine,但 defer 函數將會被繼續調用。併發

3.GOMAXPROCS(n int) int 用來設置可同時運行的線程數,並返回當前設置的值,若是 n<1 將不會改變當前的設置。NumCPU()返回當前的CPU核數,一般這樣使用:框架

runtime.GOMAXPROCS(runtime.NumCPU())函數

4.併發和並行是兩個概念。併發是對單核進行輪詢執行,並行是多核平行執行。spa

5.匿名函數的調用記得加上括號。線程

defer func (){
 fmt.Println("Hello Man")
}()

6.Goroutine 之間經過 channel 來通信,能夠認爲 channel 是一個管道或者先進先出的隊列。你能夠從一個 goroutine 中向 channel 發送數據,在另外一個 goroutine 中取出這個值。生產者/消費者是最經典的 channel 使用示例。協程消費者在沒有接收到數據前,是阻塞的。協程

7.channel 能夠是多種數據類型。生產者直到數據被消費者取走後才能發送下一條數據;channel 的消費者直到生產者放入數據後繼續取數據。正是這種機制,才保證數據的不會錯亂,從而實現同步。blog

8.Go 裏的定時器相關的函數有 time.After,time.AfterFunc,time.Tick .隊列

  • c := time.After(10 * time.Second) 

 //返回 channel 類型,10秒後向 channel 發送當前時間資源

t := <-c

  • time.AfterFunc(10*time.Second, Test),等待時間 10秒,而後調用函數 test。注意這裏的函數 f 是不帶任何參數和返回值的.
  • Tick 與 After 有點相似,惟的區別是 After 等待時間到期後,定時器就結束了。Tick 是每隔一段時間 d 都會向 channel 發送當前時間。說到底,tick就是一個定時任務器。

9.Golang 能夠在任何平臺上開發,只要到目標平臺上編譯便可。咱們所須要作的就是複製交叉編譯的二進制文件來實現可移植性。

 

10.Gin是一個MVC的web開發框架,跟PHP的傳統框架很類似。

11.若是兩個或者多個 goroutine 在沒有互相同步的狀況下,訪問某個共享的資源,並試圖同時 讀和寫這個資源,就處於相互競爭的狀態,這種狀況被稱做競爭狀態(race candition)。競爭狀態 的存在是讓併發程序變得複雜的地方,十分容易引發潛在問題。對一個共享資源的讀和寫操做必 須是原子化的,換句話說,同一時刻只能有一個 goroutine 對共享資源進行讀和寫操做。

 

相關文章
相關標籤/搜索