Golang的并發(fā)編程

golang是為并發(fā)而生的語言。優(yōu)雅的并發(fā)編程范式,完善的并發(fā)支持,出色的并發(fā)性能是golang區(qū)別于其他語言的一大特色。

并發(fā)的優(yōu)勢:

1、并發(fā)能更客觀地表現(xiàn)問題模型

2、并發(fā)可以充分利用cpu核心的優(yōu)勢,提高程序的執(zhí)行效率

3、并發(fā)能充分利用cpu與其他硬件設(shè)備固有的異步性

golang并發(fā)采用的協(xié)程,也是輕量級別線程,goroutine。而goroutine間通信方式是channel,我們可以使用channel在兩個或者多個goroutine之間傳遞消息。channel是進(jìn)程內(nèi)的通信方式,因此通過channel傳遞的過程和調(diào)用函數(shù)時的參數(shù)傳遞行為比較一致,比如也可以傳遞指針等。這跟面向過程c語言處理多線程采用互斥鎖寫法不太一樣的方式,更直接了當(dāng)采用并發(fā)模式編程。

select用來監(jiān)控一系列的文件句柄,一旦其中一個文件句柄發(fā)生了IO動作,該select()調(diào)用就會被返回。該機(jī)制也用于實現(xiàn)高并發(fā)的socket服務(wù)器程序,也可以用來處理異步IO問題。結(jié)合channel的緩沖機(jī)制。所以在golang并發(fā)編程中,需要十分小心處理死鎖的問題。通道需要保證有流入也有流出,如果造成只入不出或者流入速度大于流出的速度,都會對程序造成死鎖或者堵住。

多核并行化,golang編譯器還不能很智能地發(fā)現(xiàn)和利用多核的優(yōu)勢。雖然goroutine簡化了我們寫并行代碼的過程,但實際上整體運(yùn)行效率并不真正高于單線程程序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容