CLR如何管理工作者线程

工作者线程:

任何线程,而不仅仅指的是主线程。

工作项在全局队列。
工作项以FIFO算法被工作者线程取出。

TaskScheduler调度Task对象:
非工作者线程:调度Task时,该Task被添加到全局队列。
工作者线程:调度Task时,该Task被添加到本地队列。

工作者线程处理工作项:
先在本地队列查找Task,找到Task并移除Task来处理工作项。
Task以LIFO算法被工作者线程从本地队列取出。

本地队列为空,工作者线程会尝试从另一个工作者线程的本地队列的尾部“偷”一个Task,并要求获取一个线程同步锁。
所有本地队列为空,工作者线程会使用FIFO算法,从全局队列提取一个工作项。全局队列也为空,工作者线程会进入睡眠状态,等待事件的发生,等待时间过长,则醒来消灭自己。

如果工作项完成时间太长,线程池会创建更多的工作线程。
如果工作项完成速度开始变快,工作者线程会被销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值