go_工作池

18393910396 · · 300 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
```golang package main import ( "fmt" "time" ) // 在这个例子中,我们将看到如何使用goroutine 和channel实现一个_工作池_ // 工作池是我们将要在并发实例中支持的任务了,这些执行者将从`jobs`通道接受任务, // 并且通过`result`发送对应的结果。 // 工作池 func worker(id int, jobs <-chan int, result chan<- int) { for j := range jobs { fmt.Println("worker : ", id, "processing job ", j) time.Sleep(time.Second * 2) // 构建耗时2s的任务 result <- j * 2 } } func main() { //为了使用worker工作池并收集他们的结果,我们需要2个chan jobs := make(chan int, 100) result := make(chan int, 100) // 这里启动了3个worker,初始是阻塞的,因为还没有传递任务 for i := 0; i < 3; i++ { go worker(i, jobs, result) } //这里我们发送9个`jobs`, //然后close这些chan表示这些就是所有的任务了 for j := 0; j < 9; j++ { jobs <- j } close(jobs) //最后,我们收集这些任务的返回值 for a := 1; a <= 9; a++ { <-result } } ```
300 次点击  
加入收藏 微博
下一篇:忽略
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传