簡體   English   中英

ThreadPool.QueueUserWorkItem preferredLocal是做什么的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM