幾個小技巧幫你實現(xiàn)Golang永久阻塞
Go 的運行時的當(dāng)前設(shè)計,假定程序員自己負責(zé)檢測何時終止一個 goroutine 以及何時終止該程序。可以通過調(diào)用 os.Exit 或從 main() 函數(shù)的返回來以正常方式終止程序。而有時候我們需要的是使程序阻塞在這一行。
使用 sync.WaitGroup
一直等待直到 WaitGroup 等于 0
package main import "sync" func main() { var wg sync.WaitGroup wg.Add(1) wg.Wait() }
空 select
select{}是一個沒有任何 case 的 select,它會一直阻塞
package main func main() { select{} }
死循環(huán)
雖然能阻塞,但會 100%占用一個 cpu。不建議使用
package main func main() { for {} }
用 sync.Mutex
一個已經(jīng)鎖了的鎖,再鎖一次會一直阻塞,這個不建議使用
package main import "sync" func main() { var m sync.Mutex m.Lock() }
os.Signal
系統(tǒng)信號量,在 go 里面也是個 channel,在收到特定的消息之前一直阻塞
package main import ( "os" "syscall" "os/signal" ) func main() { sig := make(chan os.Signal, 2) signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT) <-sig }
空 channel 或者 nil channel
channel 會一直阻塞直到收到消息,nil channel 永遠阻塞。
package main func main() { c := make(chan struct{}) <-c }
package main func main() { var c chan struct{} //nil channel <-c }
總結(jié)
注意上面寫的的代碼大部分不能直接運行,都會 panic,提示“all goroutines are asleep - deadlock!”,因為 go 的 runtime 會檢查你所有的 goroutine 都卡住了, 沒有一個要執(zhí)行。你可以在阻塞代碼前面加上一個或多個你自己業(yè)務(wù)邏輯的 goroutine,這樣就不會 deadlock 了。
參考
https://pliutau.com/different-ways-to-block-go-runtime-forever/
到此這篇關(guān)于幾個小技巧幫你實現(xiàn)Golang永久阻塞的文章就介紹到這了,更多相關(guān)Golang永久阻塞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
wind10 idea中 go 開發(fā)環(huán)境搭建教程圖解
這篇文章主要介紹了wind10 idea中 go 開發(fā)環(huán)境搭建過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Go?Excelize?API源碼解析GetSheetFormatPr使用示例
這篇文章主要為大家介紹了Go?Excelize?API源碼解析GetSheetFormatPr使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08Golang泛型實現(xiàn)類型轉(zhuǎn)換的方法實例
將一個值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Golang泛型實現(xiàn)類型轉(zhuǎn)換的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-12-12Golang利用casbin實現(xiàn)權(quán)限驗證詳解
Casbin是一個強大的、高效的開源訪問控制框架,其權(quán)限管理機制支持多種訪問控制模型,Casbin只負責(zé)訪問控制。本文將利用casbin實現(xiàn)權(quán)限驗證功能,需要的可以參考一下2023-02-02go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染
這篇文章主要為大家介紹了go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02