1 消费者线程统一到ThreadFunc函数中执行,初始时消费者线程判断任务队列为空,会挂起在条件变量上。
2 消费者线程被唤醒后,首先检查退出码,判断是否需要退出,如果需要退出的就主动解锁并退出
之所以消费者线程自动退出的目的是,不让管理者线程承担过多的工作,管理者线程应该只是负责统一的管理,
即管理者线程设置线程退出码,之后的退出工作完全由消费者线程自己完成。
3 消费者线程只是取任务,执行任务,无任务挂起
1 管理者线程需要做两件事:
1.1 当任务数比较多时,能够合理的增加线程数
1.2 当任务数比较少时,能够合理的减少线程数
2 增加线程数
2.1 管理者增加消费者的线程通过忙碌线程数和当前创建的线程数的占比来确定,并且线程数的总数不能超过最大线程数
2.2 此设计的线程池的占比设计为70%,即当忙碌线程数大于等于创建线程数的70%时,就会一次增加10个线程(占比需要合理设计,这里的70只是粗略的设计)
3 减少线程数
3.1 管理者减少消费者的线程数同样通过忙碌线程数和当前创建的线程数来确定,并且线程数最小不能小于最小线程数
3.2 此设计的线程池较少条件为空闲线程数大于等于忙碌线程数的两倍,
则每次退出10个(管理者线程只是设置线程退出码,唤醒消费者线程,实际上是消费者线程自己结束)
(同样,线程数的退出条件也应该合理设计,这里只是粗略设计)