1,為什麼要控制goroutine的數量?
goroutine固然好,但是數量太多了,往往會帶來很多麻煩,比如耗盡系統資源導致程式崩潰,或者cpu使用率過高導致系統忙不過來。比如:
1for i:=0; i < 10000; i++
2,用什麼方法控制goroutine的數量?
要在每一次執行go之前判斷goroutine的數量,如果數量超了,就要阻塞go的執行。第一時間想到的就是使用通道。每次執行的go之前向通道寫入值,直到通道滿的時候就阻塞了,如下:
1var ch chan int23
func work() 78
func main()
14 }
這樣每次同時執行的goroutine就被限制為10個了。但是新的問題出現了,因為並不是所有的goroutine都執行完了,在main函式退出之後,還有一些goroutine沒有執行完就被強制結束了。這個時候我們就需要用到sync.waitgroup。使用waitgroup等待所有的goroutine退出。如下:
1var wg *sync.waitgroup23
func work() 78
func main()
10for i:=0; i < 10000; i++
14 wg.wait()//
等待所有goroutine退出
15 }
3,優雅的使用並控制goroutine的數量
綜上所述,我們封裝一下,**如下:
1package gpool23
import (4"
sync"5
)67 type pool struct
1112 func new(size int) *pool
16return &pool,19}
20}2122 func (p *pool) add(delta int
) 26
for i := 0; i > delta; i--
29p.wg.add(delta)30}
3132 func (p *pool) done()
3637 func (p *pool) wait()
來段測試**:
1package gpool_test23
import (4"
runtime"5
"testing"6
"time"7
"gpool"8
)910 func test_example(t *testing.t) ()20}
21pool.wait()
22println(runtime.numgoroutine())
23 }
good job,over~
如何優雅的控制文字顯示行數
如何簡單有效的隱藏超出長度的多行文字呢?曾經覺得只能通過指令碼輔以配置才能比較完美的解決這個問題,這兩天才發現原來webkit瀏覽器中已經有完美的解決方案了。這篇文章介紹了隱藏多行文字的幾種方式。下面介紹下webkit瀏覽器中純css的解決方案。line clamplook,就這麼簡單。webkit...
C Tip 如何優雅的控制線程狀態
先問讀者乙個問題,如果想控制乙個執行緒 thread 掛起,繼續,結束你會優先選擇如何處理?從面試的經驗來看,多數的面試者都會說thread不是提供了suspend,resume,abort等方法嗎,直接呼叫就好了,簡單快捷.但很多情況下簡單就是美只是乙個謊言而已.suspend和resume方法已...
如何優雅的送禮?
送禮的尺度要以法律規定和公司制度為紅線,在職場上,肯定不能送重禮,否則可能成為商業賄賂。很多國際化的公司都有明確的送禮和收禮規定,不能超過幾百元。牢記這一條,你就會發現有創意是多麼的重要,因為你的預算空間實在很小。送禮這件事,從策劃選禮物到對方接收到禮物是乙個操作過程,最重要的是送禮時刻。其實對於有...