go語言基礎 併發

2021-08-19 13:54:24 字數 1101 閱讀 7250

.併發性、並行性

concurrency併發性

同時可以執行多條路徑,但是同一時間點上,只能執行1個。

parallelism並行性

多條路徑同時執行,真正的並行多核支援。

2.程序,執行緒,協程-->多工

程序process:正在執行的程式。

執行緒thread:程序中的一條執行路徑。。

協程coroutine:輕量級的執行緒。 高併發

3.go語言中的goroutine,就是go的協程的實現。

4.啟動goroutine,

go關鍵字,建立並啟動協程,一條執行路徑

go 函式呼叫

啟動了goroutien,執行指定的函式,函式執行結束,意味著該goroutine結束了。如果函式有返回值,那麼也會被捨棄的。

5.main goroutine,當程式執行的時候,自動建立並啟動了main goroutine,執行main(),如果程式中有多條goroutine,併發執行,如果main goroutine結束,那麼其他的子goroutine也會結束,我們不讓主mian函式goroutien結束的方法有以下三種。

a:time.sleep()

b:同步等待組:sync包的waitgroup

要執行的子goroutine,需要通過add(2)

main中wait(),表示main goroutine進入等待狀態,相當於阻塞,暫時不執行。直到waitgroup中的子goroutine執行完畢,解除阻塞。

每當子goroutine,呼叫done(),表示減。

c:通道:channel,王道

packagemain

import(

"fmt"

"time"

)funcmain()

//列印數字

functest1()

}//列印數字

functest2()

}

這就是乙個很典型的併發,大家可以自行去試試執行結果,為了不讓main函式結束

Go語言基礎 併發

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

Go語言併發

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

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傳送至...