前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分析一个简单的goroutine资源池

分析一个简单的goroutine资源池

作者头像
charlieroro
发布2021-12-28 08:53:07
3320
发布2021-12-28 08:53:07
举报
文章被收录于专栏:charlieroro

分析一个简单的goroutine资源池 tunny

从资源池中获取goroutine并进行处理的逻辑如下:

tunny将goroutine处理单元封装为workWrapper,由此可以对goroutine的数目进行限制。

workerWrapper.run()作为一个goroutine,内部负责具体事务的处理。其会将一个workRequest(可以看作是请求处理单元)放入reqChan,并阻塞等待使用方的调用。workRequest主要包含两个channel,其中jobChan用于传入调用方的输入,retChan用于给调用方返回执行结果。

调用方会从pool的reqChan中获取一个workRequest请求处理单元,并在workRequest.jobChan中传参,这样workerWrapper.run()中就会继续进行work.process处理。处理结束之后将结果通过workRequest.retChan返回给调用方,然后继续通过reqChan <- workRequest阻塞等待下一个调用方的处理。

其中workerWrapper.run()中的work是一个需要用户实现的接口,接口内容如下,最重要的接口是Process(interface{}) interface{}

代码语言:javascript
复制
type Worker interface {
	// Process will synchronously perform a job and return the result.
	Process(interface{}) interface{}

	// BlockUntilReady is called before each job is processed and must block the
	// calling goroutine until the Worker is ready to process the next job.
	BlockUntilReady()

	// Interrupt is called when a job is cancelled. The worker is responsible
	// for unblocking the Process implementation.
	Interrupt()

	// Terminate is called when a Worker is removed from the processing pool
	// and is responsible for cleaning up any held resources.
	Terminate()
}

结论

tunny中的封装和处理函数并不适合所有的场景,但可以借鉴其核心思想来构造特定场景下的goroutine资源池。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档