話說真的好久沒有寫部落格了,最近趕新專案,工作太忙了。這一周任務比較少,又可以隨便敲敲了。
逛論壇的時候突發奇想,想用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())
1func 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語言實現記憶體池
什麼是記憶體池,這裡簡單介紹一下 不做詳細說明 記憶體池技術是一種用於分配大量大小相同的小物件的技術,通過該技術可以極大加快記憶體分配 釋放過 程。其原理是先申請一大塊記憶體,然後分成若干個大小相等的小塊,用鍊錶的方式將這些小塊鏈在一起,當開發人員需要使用記憶體時 分配 從煉表頭取下一塊返 回給開發...