Go worker并发模式

来源:互联网 发布:自选股软件下载 编辑:程序博客网 时间:2024/06/05 20:17

Go语言借助于goroutine和channel可以非常方便的处理并发任务。

package mainimport "fmt"import "time"// go goroutinefunc worker(id int, jobs <-chan int, results chan<- int) {       for j := range jobs {              fmt.Println("worker", id, "started  job", j)              time.Sleep(time.Second)              fmt.Println("worker", id, "finished job", j)              results <- j       }}func main() {       // 定义两个channel,相当于队列       // jobs接收请求       // results输出响应结果       jobs := make(chan int, 100)       results := make(chan int, 100)       // 创建workpool,大小为3,可以理解成线程池       for w := 1; w <= 3; w++ {              go worker(w, jobs, results)       }       // 发送任务       for j := 1; j <= 5; j++ {              jobs <- j       }       close(jobs)       // 得到结果       for a := 1; a <= 5; a++ {              <-results       }}


0 0
原创粉丝点击