go并发编程系列七:手写一个线程池
背景:提到线程池,我们会有大概的印象,通常我们对线程池的理解是:一组活跃的线程,但是这种理解是片面的,不完整的,为此,在手写线程池之前,我们一定要明确线程池到底是什么?不要以我以为的方式去写代码。
一、线程池有以下要素组成
线程队列(Task Queue):用于存储待执行的任务,通常是一个先进先出(FIFO)队列。
工作线程池(Worker Threads):由一组已创建的线程组成,它们等待从任务队列中获取任务并执行它们。
管理器(Manager):负责将任务分配给空闲的工作线程,并监控线程池的状态。
把上述3个要素提取出来,以面向对象的思维,我们得到如下关键信息:
1、任务
2、任务队列
3、工作线程池
任务是需要线程池里的工作线程处理的,而线程池的工作线程是一组已创建的线程,任务是通过队列进入到线程池的工作线程池进行处理,队列的特征是什么?先进先出,也就是说线程池处理任务本质上是:工作线程池处理队列里的任务,其处理任务的特征需要符合队列的特征。