go筆記08

並行和併發

一、並行

並行的關鍵是有同時處理多個任務的能力,但只能先做一個,在做另一個並行是加硬件可以解決

同一時間只能做一件事,多件事可以分多個時間去做

指在同一時刻,有多條指令在多個處理器上同時執行

二、併發

併發的關鍵是有處理多個任務的能力,不一定要同時。

併發時代碼性能優化可以解決  

同一時間可以快速切換多件事

比如: 喫飯 看電視 玩遊戲

指在同一時刻只能有一條指令執行,但多個進程指令被快速的輪換執行

進程 線程 協程

goroutine 

一、進程

1.定義

進程是程序在操作系統中的一次執行過程,系統進行資源分配和調度的一個獨立單位。

一個獨立的應用,程序運行起來,產生一個進程

進程是擁有資源和獨立運行的最小單位,也是程序執行的最小單位。

2. 特點:

動態性:進程是程序的一次執行過程,是臨時的,有生命週期的,是動態產生的,動態消亡的;

併發性:任何進程都可以同其他進行一起併發執行;

獨立性:進程是系統進行資源分配和調度的一個獨立單位;

結構性;進程由程序,數據和進程控制塊三部分組成

二、線程

定義及特點

線程是調用CPU運算的最小單元

線程的調度由操作系統進行調度

三、協程

定義及特點

輕量級線程

協程的調度由用戶控制

一個進程可以有多個線程,一個線程上可以跑多個協程

四、go中的併發放

使用goroutine 是協程

go 中使用併發

goroutine必定對應一個函數。

多個goroutine可以執行相同的函數

Go程序就會main()函數創建一個默認的goroutine

一、goroutine的使用

先執行主協程,其他的協程創建需要時間,所以會先執行main,在執行Hello 

那個空閒執行那個,主攜程終止,其他攜程也會終止

3. 有緩存和無緩存的區別

無緩存的chan ,chan爲空,讀取將阻塞,chan不爲空,寫入將阻塞

有緩存的chan,當緩存滿了寫入將阻塞,當chan爲空讀取將阻塞

已關閉的chan中不能寫入數據

從關閉的channel讀取消息不會產生panic,且只能讀取還被讀取的消息

關閉channel會產生一個廣播機制,所有向channel讀取消息的goroutine都會收到消息

 

四、 Goroutine池

作用 

大量的goroutine會佔用大量的內存,Goroutine池可以減輕內存負擔

性能消耗;重複的創建與銷燬goroutine,大量的goroutine調度等會佔用資源,goroutine池

可以減輕資源消耗

減少goroutine創建時間,提高效率

管理協程,控制併發量 定期回收等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章