从体检采血流程看线程池的实现原理

  体检中心的采血室,不同于其他科室,往往都配备多名固定的采血人员。每次去体检,采血室外都要排上长长的队伍,井然有序的采血场面俨然一副现实版的线程池工作流程。

图片

01

采血流程

作为一个程序员,每年的体检都很忐忑,日期一推再推,生怕检出啥小毛病来。眼看就要到期,赶紧约了今天上午的体检。

到了体检中心,第一个项目就是采血。虽然 9 点多就到了,但是排队的人还是不少。找了一个人少的队伍排进去,等轮到我时才发现,原来我没有领管,只有先领了管才能过来采血。而领管是单独的一个队,WTF!(记得之前采血不需要先领管啊)

还好,小姐姐看我已经排了这么长的队,让我领完管后就直接去找她,不用再排队了。我很开心。领完管后采血很快就完事了。

整个采血流程如图。

第一步,先取管

图片

第二步,去采血

图片

体检中心的采血室,不同于其他科室,往往都配备多名固定的采血人员。

看着忙忙碌碌的采血人员,长长的等待队伍,这井然有序的采血场面俨然一副现实版的线程池工作流程。

02

线程池工作流程

采用多线程可以充分利用CPU时间片 ,使得进程的整体运行效率得到提升。

线程池,是一种"池化资源"技术,通过重用线程,可以降低线程创建和销毁带来的资源消耗;在任务到达时,无需等待线程创建即可立即执行,可以提高请求响应速度;通过线程池,可以对线程这一稀缺资源进行统一的分配和管理,提升系统的稳定性。

图片

当提交一个新任务到线程池时,线程池的处理流程如下:

  1. 当线程数小于核心线程数时,创建一个新线程来执行任务;

  2. 当线程数达到核心线程数时,将任务放到阻塞队列中;

  3. 当线程数达到核心线程数且阻塞队列满了,则继续创建线程,直到线程数达到最大线程数;

  4. 当线程数达到最大线程数并且队列也满了,则会触发饱和策略

类比线程池,体检中心,为了提升整体采血效率,采用多线程(多个窗口的采血人员);事先进行预热(采血人员提前准备好);当采血窗口都在工作时,新来的体检人员会加入到阻塞队列(乖乖排队);

由于体检中心采血任务量相对比较固定,因此核心线程数等于最大线程数(采血窗口不会扩缩);

如果排队采血的人突然暴增,工作人员会引导部分体检人员到其他科室,相当于触发了线程池的饱和策略

此外,领管和采血,两个不同的流程,使用不同的线程池,做到了线程池隔离,相互之间不受影响

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值