性能问答>线程池内部进行任务隔离>
5回复
1年前

线程池内部进行任务隔离



最近优化线程池的参数,想到之前看到一篇博客,博主给了一个场景。

背景:

他们发现项目中有个任务占用了线程池的大部分线程资源,导致其他业务出现异常情况。

期望:

他们想限制指定任务的线程数。例如池中有1000个线程,只给指定任务10个线程去处理。这个应该如何实现…

当时心里犯嘀咕,这…难道不应该单独开个池子吗?

博主的处理:

印象很深博主说,他们用了Semaphore来做这个限制。(很久看的了,找不到文章问他们是怎么做的)

思考:

撇开是否另开池子做业务隔离不说,顺着博主的思路,Semaphore如何配合线程池做任务线程数限制呢?

  • 如果是在任务内部做acquire及release,或者做availablePermits检查。应该是不合理的,这只能保证同一时间段最多N个拿到指定任务的线程处于Running状态。其他分配到任务,但是acquire申请失败的线程会一直阻塞,虽然没在跑,但占着茅坑不拉粑粑。而线程领取任务的动作是由池子框架层完成的,这个无法进行干预。所以很疑惑…
3176 阅读
请先登录,查看5条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步