go簡單協程池實現

2021-10-02 09:51:54 字數 1025 閱讀 5471

為防止無限制開啟gorouting造成的cpu效能浪費以及更嚴重的記憶體溢位和程式崩潰,這裡加單實現一下協程池

深入理解:

流程圖:

**實現: 

package main

import (

"fmt"

"time"

)//----------------------有關任務的功能-----------

//定義乙個任務型別

type task struct

//建立乙個task任務

func newtask(arg_f func() error) *task

}//task執行業務的方法

func (t *task) execute()

}//----------------------有關協程池pool的功能-----------

//定義協程池

type pool struct

//建立協程池

func newpool(cap int) *pool

}//協程池建立乙個worker,讓這個worker取佇列裡拿任務執行

func (p *pool) startoneworker(worker_id int)

}//啟動協程池

func (p *pool) run()

//從entrychannel中取任務,將新任務發給內部佇列jobschannel

for task := range p.entrychannel

}func main() )

//2.建立容量為4的協程池

p := newpool(4)

task_num := 0

//3.將任務放入協程池外部介面

go func()

}()//4.啟動pool

p.run()

}

GO 協程池 Goroutine復用 限制數量

建立乙個協成復用,限制協成數量的協成池 package pool import fmt type pool inte ce type pool struct 計數,限制協成數 func new size int pool size func p pool schedule task func err...

go 協程等待

sync包提供了基本的同步基元,如互斥鎖 但是這裡不是討論執行緒通訊的問題 而執行緒通訊應使用channel 以前使用time.sleep 來保證執行緒執行完成,顯然執行緒執行所需要的時間不確定 sync裡面有乙個waitgroup,它是乙個結構體,可以用於等待執行緒執行 這樣不用去估算執行緒需要執...

Go 協程 通道

目錄 go 協程 go 通道 go 協程go 協程可以看作是輕量級執行緒。與執行緒相比,建立乙個go協程的成本很小。因此在go應用中,常常會看到有數以千計的go協程併發地執行 go 協程相比於執行緒的優勢 啟動乙個go協程 在呼叫函式和方法時,在前面加上關鍵字go,可以讓乙個新的go協程併發執行 p...