工作者线程:
任何线程,而不仅仅指的是主线程。
工作项在全局队列。
工作项以FIFO算法被工作者线程取出。
TaskScheduler调度Task对象:
非工作者线程:调度Task时,该Task被添加到全局队列。
工作者线程:调度Task时,该Task被添加到本地队列。
工作者线程处理工作项:
先在本地队列查找Task,找到Task并移除Task来处理工作项。
Task以LIFO算法被工作者线程从本地队列取出。
本地队列为空,工作者线程会尝试从另一个工作者线程的本地队列的尾部“偷”一个Task,并要求获取一个线程同步锁。
所有本地队列为空,工作者线程会使用FIFO算法,从全局队列提取一个工作项。全局队列也为空,工作者线程会进入睡眠状态,等待事件的发生,等待时间过长,则醒来消灭自己。
如果工作项完成时间太长,线程池会创建更多的工作线程。
如果工作项完成速度开始变快,工作者线程会被销毁。