[英]ThreadPool.QueueUserWorkItem NullReferenceException
[英]What is ThreadPool.QueueUserWorkItem preferLocal for?
我剛剛注意到,.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
布爾值(preferLocal)的作用是什么,它將如何影響我的代碼?
看起來是此鏈接到此問題的 請求請求添加的(兩個Github鏈接,“添加ThreadPool.QueueUserWorkItem(...,bool preferredLocal)/#14214”和“為本地線程池隊列添加QueueUserWorkItem /#12442”,分別)。
問題描述為:
ThreadPool.QueueUserWorkItem始終排隊到全局隊列; 但是,當線程池線程將額外的工作項排隊時,最好能夠選擇排隊到當前線程池線程的本地隊列中。
原理和用法
- 當有多個線程排隊時,減少了全局隊列上的爭用
- 排隊工作項完成后,可能會更熱門的本地數據
- 利用線程池的任務竊取
- (即類似於Task對於子Task所做的合理性)
對我來說,很遺憾,最新的內聯文檔(從中生成MSDN文檔)不是拉取請求的先決條件。
最初構建線程池時,它只需要完成一個工作隊列。 但是,當將所有Task
都引入框架時,他們趁機將線程本地隊列(和工作竊取 )引入到現在已重命名為全局隊列的地方。 看起來這是清理工作,以允許特定訪問這些隊列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.