File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change @@ -128,3 +128,60 @@ func consumer(i int, ch chan int) {
128
128
}
129
129
```
130
130
131
+
132
+
133
+ ## 手写协程池
134
+
135
+ ``` go
136
+ package main
137
+
138
+ import (
139
+ " fmt"
140
+ " time"
141
+ )
142
+
143
+ type Task struct {
144
+ f func ()
145
+ }
146
+
147
+ func (t *Task ) Execute () {
148
+ t.f ()
149
+ }
150
+
151
+ type Pool struct {
152
+ tasks chan *Task
153
+ entry chan *Task
154
+ nums int
155
+ }
156
+
157
+ func (p *Pool ) Work (id int ) {
158
+ for task := range p.tasks {
159
+ task.Execute ()
160
+ fmt.Println (" excute id: " , id)
161
+ time.Sleep (2 * time.Second )
162
+ }
163
+ }
164
+
165
+ func (p *Pool ) Run () {
166
+ for i := 1 ; i <= p.nums ; i++ {
167
+ go p.Work (i)
168
+ }
169
+ for task := range p.entry {
170
+ p.tasks <- task
171
+ }
172
+ }
173
+
174
+ func main () {
175
+ task := &Task{f: func () {
176
+ fmt.Println (" Execute!" , time.Now ())
177
+ }}
178
+ p := &Pool{nums: 3 , entry: make (chan *Task), tasks: make (chan *Task)}
179
+ go func () {
180
+ for {
181
+ p.entry <- task
182
+ }
183
+ }()
184
+ p.Run ()
185
+ }
186
+ ```
187
+
You can’t perform that action at this time.
0 commit comments