GO worker pool

背景

在实际工作中,我们总会限制goroutine数量—— worker pool模式,控制goroutine数量,避免goroutine泄露与膨胀

示例

package main

import (
    "fmt"
    "time"
)

func worker(w int, jobs int, results chanint) {
    for j := range jobs {
        fmt.Printf("Start task:%d, job:%d\n", w, j)
        time.Sleep(time.Second)
        results w * 2
        fmt.Printf("End task:%d, job:%d\n", w, j)
    }
}

func main() {
    jobs := make(chan int, 100)
    results := make(chan int, 100)

    // 开启3个goroutine
    for w := 0; w < 3; w++ {
        go worker(w, jobs, results)
    }

    // 跑5个任务
    for j := 0; j < 5; j++ {
        jobs  j
    }
    close(jobs)

    //输出结果
    for a := 0; a < 5; a++ {
        tmp := results
        fmt.Println(tmp)
    }
}

执行

2
0
4
End task:0, job:1
End task:2, job:0
Start task:2, job:4
End task:2, job:4
End task:1, job:3
4
2

Original: https://www.cnblogs.com/kaituorensheng/p/15866063.html
Author: jihite
Title: GO worker pool

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/549042/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • seaborn学习笔记(五):绘制多子图

    3.1 map方法:指定绘图方法 ¶ PairGrid所有参数中,只有data是必传参数,实例化时,seaborn会根据传入数据集的各个字段情况,绘制n行n列个坐标系,但仅限于绘制…

    技术杂谈 2023年7月24日
    079
  • JavaCV的摄像头实战之三:保存为mp4文件

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《JavaCV的摄…

    技术杂谈 2023年7月11日
    086
  • 虚拟环境搭建

    虚拟环境搭建 我们进行开发的时候虚拟环境搭建尤为重要,我们如果需要的python解释器模块版本不一样可以采用这个办法 pycharm中搭建 命令创建虚拟环境 比如centos没有图…

    技术杂谈 2023年6月21日
    0101
  • ssm整合后的使用

    <!– 添加分页插件的依赖包 –> <dependency> <groupid>com.github.pagehelper</grou…

    技术杂谈 2023年7月25日
    088
  • 编程语言史话,为什么编程中 1=2?

    考虑以下代码: a = 1 a = a + 1 print(a) 你写代码时候是不是也疑惑过,为什么代码中会有a = a + 1,这个怎么解释?这就不是在说1 = 2么? 这是一个…

    技术杂谈 2023年5月31日
    0103
  • XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素…

    技术杂谈 2023年6月21日
    089
  • Dell raid 硬盘格式重装系统

    这种情况大概率都是出现在dell笔记本上,因为dell 原厂默认使用的硬盘格式是raid on 硬盘模式,并非我们常用的AHCI硬盘模式。raid on 硬盘模式下,绝大部分PE也…

    技术杂谈 2023年6月21日
    0144
  • Pthread并发编程(二)——自底向上深入理解线程

    在本篇文章当中主要给大家介绍线程最基本的组成元素,以及在 pthread 当中给我们提供的一些线程的基本机制,因为很多语言的线程机制就是建立在 pthread 线程之上的,比如说 …

    技术杂谈 2023年7月24日
    080
  • 如何把返回的datatable按某个字段 排序 升序或者降序

    如何把返回的datatable按某个字段 排序 升序或者降序 DataTable dtdata = GetXmlData(doc, “DetailList”…

    技术杂谈 2023年7月11日
    090
  • Linux基础知识一

    Linux基础知识一 Linux目录结构 /bin: Binaries,存放的都是二进制文件,包括一些常用的命令,例如:ls、cat /boot: 存放系统内核和启动需要的文件,L…

    技术杂谈 2023年6月21日
    097
  • 敏捷培训有感

    一周前参加了个关于敏捷的培训,今天回想起来,记忆最深的是两个游戏环节。 游戏一 组装 10 只同样小狗,每只小狗需要 5 块积木,流水线上 5 个人,每人负责固定的一块积木的拼接。…

    技术杂谈 2023年7月11日
    070
  • 设计模式-责任链模式

    将各个功能拆分后分别封装(各功能解耦),需要时可 自由组合(包括执行顺序) 话不多说,看个优化案例吧。 优化案例 以下是模拟客户端想服务端发送请求的业务流程。 客户端调用代码如下。…

    技术杂谈 2023年7月11日
    071
  • 自动化测试之争:code vs codeless

    在TesterHome看到的一个话题,当我们选择做自动化时是否需要code 或者codeless。 code方案 用code去做自动化,实现过程就是拿个IDE撸代码。 python…

    技术杂谈 2023年5月31日
    092
  • CR和LF

    声明 本文转自:CR和LF – 田野与天 – 博客园 (cnblogs.com) 以下为正文 现在的电脑操作系统主要有windows、unix/linux、…

    技术杂谈 2023年6月1日
    099
  • 基于Vite+React构建在线Excel

    Vite是随着Vue3一起发布的一款新型前端构建工具,能够显著的提升前端开发体验,它主要由两部分组成: (1)一个开发服务器,它基于 原生 ES 模块提供了丰富的内建功能 ,如速度…

    技术杂谈 2023年5月31日
    094
  • 实战!使用pano2vr生成html5全景页面【转】

    随着现代视觉技术的进步以及对空间展示的迫切需求,很多的无人机可以拍出360度甚至720度全景照片,怎样将全景地图以html5的形式展示出来?文章将详细讲解如何使用pano2vr.e…

    技术杂谈 2023年5月31日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球