Go goroutine 不可濫用

2021-07-04 11:43:32 字數 510 閱讀 6738

goroutine 是go語言最大的創新,但這並不意味著我們可以隨意使用。原因:

1 goroutine的指標傳遞是不安全的

2 goroutine增加了函式的危險係數

3 goroutine的濫用陷阱

處理方法

1 當啟動乙個goroutine的時候,如果乙個函式必須要傳遞乙個指標,但是函式層級很深,在無法保證安全的情況下,傳遞這個指標指向物件的乙個轉殖,而不是直接傳遞指標。

2 什麼時候使用

goroutine:

有兩種思維邏輯會想到使用goroutine:

2.1 業務邏輯需要併發

比如乙個伺服器,接收請求,阻塞式的方法是乙個請求處理完成後,才開始第二個請求的處理。其實在設計的時候我們一定不會這麼做,我們會在一開始就已經想到使用併發來處理這個場景,每個請求啟動乙個goroutine為它服務,這樣就達到了並行的效果。這種goroutine直接按照思維的邏輯來使用goroutine。

2.2 效能優化需要併發

詳見here.

go語言 go goroutine 如何控制非同步

go 語言是一種併發程式語言,在 go 裡有乙個非常重要的關鍵字 go goroutine 一般我們可以用它做一些非同步,併發的任務。goroutine 用來呼叫函式,當某個函式被 go 關鍵字呼叫後,go 就會建立乙個類似協程的東西,來執行這個函式,這樣可以輕易的實現併發。示例 package m...

不應濫用named let

define f x x define g x letrec x x x define a 1 2 3 f a 1 23 eq?a f a t eq?a g a t define b g a set car b 10 a 10 23 可見,g函式的定義中,named let並未深拷貝x的值,它只是建...

請不要濫用異常

exception php的異常機制的功能非常強大,並且是可以跨作用域的傳遞豐富的資訊,但它強大的功能很容易讓我們濫用它。比如在使用者檢查登入時,如果密碼不正確,你可能會在模型中丟擲乙個異常,在控制器處理它。對於程式設計師,這樣做會很舒服,因為你不再費心思考慮心如何構建返回值和制定返回規範,也不必關...