go語言實現執行緒池

2022-02-13 07:23:25 字數 1782 閱讀 1536

話說真的好久沒有寫部落格了,最近趕新專案,工作太忙了。這一周任務比較少,又可以隨便敲敲了。

逛論壇的時候突發奇想,想用go語言實現乙個執行緒池,主要功能是:新增total個任務到執行緒池中,執行緒池開啟number個執行緒,每個執行緒從任務佇列中取出乙個任務執行,執行完成後取下乙個任務,全部執行完成後**乙個函式。

思路就是把任務放到channel裡,每個執行緒不停的從channel中取出任務執行,並把執行結果寫入另乙個channel,當得到total個結果後,**函式。

1 type goroutinepool struct910

//初始化

11 func (self *goroutinepool) init(number int, total int

) 17

18//

開門接客

19 func (self *goroutinepool) start()

2829 err :=task()

30 self.result <-err31}

32}()33}

3435

//獲得每個work的執行結果

36for j := 0; j < self.total; j++

4142

if res !=nil 45}

4647

//所有任務都執行完成,**函式

48if self.finishcallback !=nil 51}

5253

//關門送客

54 func (self *goroutinepool) stop()

5859

//新增任務

60 func (self *goroutinepool) addtask(task func() error)

6364

//設定結束**

65 func (self *goroutinepool) setfinishcallback(callback func())

1

func download_test()

1415 pool := new

(goroutinepool)

16 pool.init(3

, len(urls))

1718

for i :=range urls )23}

2425 isfinish := false

2627

pool.setfinishcallback(func() (&isfinish)

31})

3233

pool.start()

3435

for !isfinish

3839

pool.stop()

40 fmt.println("

所有操作已完成!")

檔案長度:

", length)

65return

nil66 }

使用起來還算可以的吧。。。

c語言實現執行緒池

ifndef threadpool h included define threadpool h included include typedef struct threadpool job void routine void void arg struct threadpool job next ...

Go語言實現Valid Parentheses

write a function called that takes a string of parentheses,and determines if the order of the parentheses is valid.the function should return true if ...

C語言實現記憶體池

什麼是記憶體池,這裡簡單介紹一下 不做詳細說明 記憶體池技術是一種用於分配大量大小相同的小物件的技術,通過該技術可以極大加快記憶體分配 釋放過 程。其原理是先申請一大塊記憶體,然後分成若干個大小相等的小塊,用鍊錶的方式將這些小塊鏈在一起,當開發人員需要使用記憶體時 分配 從煉表頭取下一塊返 回給開發...