看別個的協程池自己練了下
package main
import "fmt"
type Task struct {
doSth func() error
}
func NewTask(taskFunc func() error) (task *Task){
task=&Task{
doSth:taskFunc,
}
return
}
func (t *Task)Execute() {
t.doSth()
}
//
type Pool struct {
entryChannel chan *Task
workerNum int
jobsChannel chan *Task
}
func NewPool(cap int) (pool *Pool ){
pool=&Pool{
entryChannel:make(chan *Task),
workerNum:cap,
jobsChannel:make(chan *Task),
}
return
}
func (p *Pool)Worker(workerId int) {
for task:=range p.jobsChannel {
task.Execute()
}
}
func (p *Pool)Run() {
for i:=0;i<p.workerNum;i++ {
go p.Worker(i)
}
for task:=range p.entryChannel {
p.jobsChannel<-task
}
close(p.jobsChannel)
close(p.entryChannel)
}
func main() {
t:=NewTask(func() error {
fmt.Println("123")
return nil
})
t2:=NewTask(func() error {
fmt.Println("456")
return nil
})
pool:=NewPool(3)
go func() {
for {
pool.entryChannel<-t
pool.entryChannel<-t2
}
}()
pool.Run()
}
相關文章
- golang協程池設計Golang
- Swoole協程與Go協程的區別Go
- Swoole 協程與 Go 協程的區別Go
- python 協程與go協程的區別PythonGo
- 清醒看自己,糊塗看別人
- Golang協程池(workpool)實現Golang
- 技術實踐——教你用100行寫一個 go 的協程池 (任務池)!!!Go
- ants - 目前開源最優的協程池
- 基於 swoole 協程的 MySQL 連線池MySql
- 別再懷疑自己的智商了,Raft協議本來就不好理解Raft協議
- ants——Go語言的高效能協程池Go
- 成長,就是不斷向自己妥協的過程
- 教你在 C 語言上編寫自己的協程
- 程序、執行緒、協程的區別執行緒
- 寫給自己看的在 Vue 下使用 Typescript 指北VueTypeScript
- [譯] part23: 緩衝channel和協程池
- python協程asyncio的個人理解Python
- PHP7下的協程實現PHP
- 實現一個協程帶進度條下載器
- Python協程你學會了嗎?Python
- 日常練習:寫了個grpc 連線池,希望各位前輩能提下意見RPC
- 女教授造了個方便交流的“自己”
- 別參加培訓了,打造個人IP看這篇文章就夠了
- swoole 協程原始碼解讀 (協程的排程)原始碼
- Mix XWP V1.1 - Go 通用動態協程池 WorkerPoolGo
- Swoole 實戰:MySQL 查詢器的實現(協程連線池版)MySql
- 如何做個自己想要的Window Server了?Server
- Python協程與JavaScript協程的對比PythonJavaScript
- 實現一個任務排程系統,看這篇文章就夠了
- 學習之路 / goroutine 併發協程池設計及實現Go
- 協同辦公下的RTC殺瘋了
- swoole 協程原始碼解讀 (協程的建立)原始碼
- 別低估自己的直覺,也別高估自己的智商
- Python的協程Python
- swoole到底有幾個協程
- 協程與yield個人淺解
- 個人程式設計助手: 訓練你自己的編碼助手程式設計
- 救救自己,別再這樣寫簡歷了