1. 程式人生 > >Go Example--工作池

Go Example--工作池

package main

import (
    "fmt"
    "time"
)

func main() {
    jobs :=make(chan int,100)
    results := make(chan int,100)
    //啟動3個協程
    for w:=1;w<=3;w++{
        go worker(w,jobs,results)
    }
    for j:=1;j<=9;j++{
        jobs<-j
    }
    close(jobs)
    for a:=1;a<=9;a++{
        <-results
    }
}
//每個協程中根據排程讀取通道jobs資料
func worker(id int, jobs <-chan int,results chan <-int)  {
    for j:= range jobs{
        fmt.Println("worker",id,"processing job",j)
        time.Sleep(time.Second)
        results<-j*2
    }
}