github.com/weedge/lib@v0.0.0-20230424045628-a36dcc1d90e4/pool/workerpool/readme.md (about)

     1  ## 介绍
     2  
     3  该workerpool 通过channel 存放任务,多个 Worker 共享同一个任务 Channel,通过多个协程来消费池中的任务执行,协程根据提交的任务数动态扩缩协程;任务可以定义输入,输出,超时时间;通过channel 返回是否超时。
     4  
     5  
     6  
     7  ## 场景
     8  
     9  接口请求中经常会有<u>批量任务</u>执行(可以是不同任务),将这些任务放入任务工作池中并发处理,提高接口吞吐率。
    10  
    11  **Tips:** 
    12  
    13  ants 通过sync.Pool管理worker,动态扩缩管理worker池;每提交一个任务之前会从池中获取worker,初始化一个协程来执行,这个worker有单独的任务通道channel;然后将任务提交至channel中,对应协程异步执行。如果池子满了,是否非阻塞模式,是直接nil返回,否则继续等待可用worker执行,执行完放入池中;
    14  
    15  ants 是运行时从池中获取管道初始协程,然后往管道提交任务协程异步处理;
    16  
    17  而这里实现的workerpool是启动时初始化缓冲任务管道大小,运行时根据提交任务的数量/速度,动态扩缩处理任务协程数目;
    18  
    19  一个是突增式处理,一个是扩展式处理,如果是潮汐🌊流量耗时短任务可以用第一种方式,如果是大量批量耗时相对比较高的任务可以采用第二种方式;
    20  
    21  ## 框架
    22  
    23  ![workerpool](https://raw.githubusercontent.com/weedge/lib/main/pool/workerpool/workerpool.png)
    24  
    25  ##### reference
    26  
    27  1. [ants](https://github.com/panjf2000/ants) 
    28  2. [Concurrency in Golang And WorkerPool](https://hackernoon.com/concurrency-in-golang-and-workerpool-part-1-e9n31ao) [Go语言的并发与WorkerPool](https://mp.weixin.qq.com/s?__biz=MzI2MDA1MTcxMg==&mid=2648468373&idx=1&sn=dc9c6e56cbd20c79a2593481100c69da) Github:[goworkerpool](https://github.com/Joker666/goworkerpool.git)
    29  3. [The Case For A Go Worker Pool](https://brandur.org/go-worker-pool) GitHub: [worker-pool](https://github.com/vardius/worker-pool)
    30  4. [一文搞懂如何实现 Go 超时控制](https://segmentfault.com/a/1190000039731121)
    31  5. [使用 Golang Timer 的正确方式](http://russellluo.com/2018/09/the-correct-way-to-use-timer-in-golang.html)
    32  5. [Pool:性能提升大杀器](https://time.geekbang.org/column/article/301716)
    33  5. [Visually Understanding Worker Pool](https://medium.com/coinmonks/visually-understanding-worker-pool-48a83b7fc1f5)
    34  5. [Java线程池实现原理及其在美团业务中的实践](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html)
    35  
    36  
    37  
    38  ##### 修复问题:
    39  
    40  1. 新增任务task定义超时时间,以及处理超时时间回调函数,woker获取任务执行的时候,进行超时任务处理,去掉worker对应的watch, 去掉冗余逻辑; 2021/9/26
    41