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) {
128128}
129129``` 
130130
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