Go - 工作池

Go - 工作池 首页 / Golang入门教程 / Go - 工作池

工作池是一种设计,其中固定数量的m个工作程序(Go goroutines)在工作队列中的n个任务上工作。工作一直排在队列中,直到工人完成其当前任务并提出新任务为止。

让我们看一个例子

package main

import (
"fmt"
"time"
)

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
	}
}

func main() {
	job := make(chan int, 10)
	result := make(chan int, 10)
	for w := 1; w <= 2; w++ {
		go worker(w, job, result)
	}
	for j := 1; j <= 9; j++ {
		job <- j
	}
	close(job)
	for a := 1; a <= 9; a++ {
		<-result
	}
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/go/go-worker-pools.html

来源:LearnFk无涯教程网

worker 2 processing job 1
worker 1 processing job 2
worker 2 processing job 3
worker 1 processing job 4
worker 1 processing job 5
worker 2 processing job 6
worker 1 processing job 7
worker 2 processing job 8

在此示例中,启动了2个工作人员,并将9个工作项放到了工作渠道中。工人们有一个带时间的工作循环,然后睡觉,每个人最终只能工作2个工作。在完成所有工作之后,在通道上使用close,这向所有2个工作人员发出信号,表明他们可以通过将他们退出循环范围而退出工作循环。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

快速上手Kotlin开发 -〔张涛〕

从0开始学大数据 -〔李智慧〕

趣谈Linux操作系统 -〔刘超〕

分布式系统案例课 -〔杨波〕

Spark核心原理与实战 -〔王磊〕

物联网开发实战 -〔郭朝斌〕

Spark性能调优实战 -〔吴磊〕

Serverless进阶实战课 -〔静远〕

工程师个人发展指南 -〔李云〕

好记忆不如烂笔头。留下您的足迹吧 :)