Jay*_*Jay 2 c# threadpool .net-core
我刚刚注意到.NET核心引入了Threadpool.QueueUserWorkItem的重载,它接受一个名为'preferlocal'的布尔值,并允许我传递一个类型安全的状态对象(它有一个通用参数)
在MSDN文档目前尚不完整,看起来像这样(为后人-它可能在将来被更新):
QueueUserWorkItem<TState>(Action<TState>, TState, Boolean)
C#
public static bool QueueUserWorkItem<TState> (Action<TState> callBack, TState state, bool preferLocal);
Type Parameters TState
Parameters
callBack Action<TState>
state
preferLocal Boolean
Returns
Boolean
Run Code Online (Sandbox Code Playgroud)
什么是boolean(preferLocal),它将如何影响我的代码?
看起来它是由这个链接到此问题的拉取请求添加的(两个Github链接,"添加ThreadPool.QueueUserWorkItem(...,bool preferLocal)/#14214"和"为本地线程池队列添加QueueUserWorkItem /#12442",分别).
该问题描述为:
ThreadPool.QueueUserWorkItem总是排队到全局队列; 但是,当线程池线程对额外的工作项进行排队时,可以选择能够排队到当前线程池线程的本地队列.
理由和用法
- 当许多线程排队时,减少对全局队列的争用
- 排队工作项完成时可能更热的更多本地数据
- 利用线程池的任务窃取
- (即类似于Task为子任务执行此操作的理性)
对我来说,遗憾的是,最新的内联文档(从中生成MSDN文档)不是拉取请求的先决条件.
首次构建线程池时,它只有一个工作队列要完成.但是,当所有的Task好处都被引入框架时,他们借此机会引入线程本地队列(和工作窃取)以及现在重命名为全局队列的队列.看起来这是清理工作,允许特定访问这些队列.
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |