專利名稱:數據流網絡中的執(zhí)行塊的非貪婪消費的制作方法
技術領域:
本發(fā)明涉及計算機領域,更具體地,涉及數據流網絡中的執(zhí)行節(jié)點的非貪婪消費。
背景技術:
計算機和計算系統(tǒng)已經影響到了現代生活的幾乎每個方面。計算機通常在工作、 消遣、保健、運輸、娛樂、家政管理等中都有涉獵。在數據流網絡中,數據從一個節(jié)點傳播至另一個。然而,如果不進行任何節(jié)流地傳播,那么目標節(jié)點可能被其正在處理的傳入數據淹沒,或另選地,目標節(jié)點可能在需要之前就消費了數據,阻止了另一節(jié)點可能對其進行消費??梢允褂米枞麃韺崿F這樣的節(jié)流,其中源節(jié)點等待目標節(jié)點中的可用性。然而這可能占用底層的處理器或線程。這可造成不可縮放的系統(tǒng)。在此要求保護的主題不限于解決任何缺點或僅在諸如上述環(huán)境中操作的各個實施例。相反,提供該背景僅用以示出在其中可實踐在此描述的部分實施例的一個示例性技術領域。
發(fā)明內容
此處所述的一個實施例是在計算環(huán)境中實施的方法。該方法包括處理消息的動作。該方法包括在第一實體處從第二實體接收將處理的第一消息的第一提議。該方法還包括決定并不處理第一消息。作為決定并不處理第一消息的結果,向第二實體作出這樣的指示。還是作為決定并不處理第一消息的結果,存儲第二實體提供了消息的指示。該指示包括與第二實體相關的指示符。在使用該指示來指示第二實體后,該方法包括向第二實體指示處理消息的可用性。提供本發(fā)明內容以便以簡化的形式介紹將在以下具體實施方式
中進一步描述的一些概念。本發(fā)明內容并非旨在標識所要求保護的主題的關鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。另外的特征和優(yōu)點將在以下的描述中闡述,并且部分可從該描述中顯而易見,或者可以從此處的教示實踐中習得。本發(fā)明的各特征和優(yōu)點可以通過在所附的權利要求書中特別指出的手段和組合來實現和獲得。本發(fā)明的特征將從以下描述和所附權利要求書中變得完全顯而易見,或者可通過如下所述對本發(fā)明的實踐而獲知。
為了描述可獲得本主題的上述和其它優(yōu)點和特征的方式,將通過參考附圖中示出的本主題的具體實施方式
來呈現以上簡要描述的本主題的更具體描述。應該理解,這些附圖僅描繪了各典型實施例,因此其不應被認為是對范圍的限制,各實施例將通過使用附圖用附加特征和細節(jié)來描述并解釋,在附圖中圖1示出了包括源節(jié)點與目標節(jié)點之間的通信的框圖2示出了包括多個目標節(jié)點、具有緩沖區(qū)的目標節(jié)點和底層處理線程的圖示的框圖;以及圖3示出了一種處理消息的方法。
具體實施例方式各實施例可以實現數據流網絡中的執(zhí)行節(jié)點的非貪婪消費。在目標節(jié)點準備好處理數據時,目標執(zhí)行節(jié)點(本文也稱為目標節(jié)點)可消費數據。在一些實施例中,數據流網絡中的執(zhí)行節(jié)點維持輸入隊列以及先前提供給它們的推遲的消息和/或先前提供消息的節(jié)點的指示符集合。如果當前忙于處理足夠數量的先前提交的消息,如果輸入緩沖區(qū)足夠滿,那么節(jié)點需要來自其他實體的一些東西來處理消息,和/或出于其他原因,執(zhí)行節(jié)點可選擇推遲新提供的消息直至需要處理更多消息之時。在那時,它可以回調源以要求將要處理的消息。例如,它可以回調可用的最新消息。在一替換實施例中,它可以回調推遲的特定消息。在以下描述中,節(jié)點可被具體示為框,如以下更詳細解釋的。現在參考圖1,示出了一個基本示例。在圖1的示例中,可以是計算實體的源節(jié)點 102-1將提議106發(fā)送至目標節(jié)點104。提議106可以是源節(jié)點102-1已處理的某個數據或消息的提議,并需要由目標節(jié)點104或某個其他節(jié)點進一步處理。提議106可以采用多種不同方式中的任何一種來實現。例如在一些實施例中,提議可包括將要處理的實際消息, 目標節(jié)點104或者可接受并處理該消息,或者可拒絕該消息。如下所述,拒絕可以是多個不同響應中的一個或多個。例如,拒絕可以是推遲或徹底且最終的拒絕。如下將更為詳盡地進行描述。在一替換實施例中,提議可以是目標節(jié)點104取得將要處理的消息的邀請以及指示目標節(jié)點104在哪里可找到將要處理的消息的指示。例如,提議106可包括指示可從哪里取得將要處理的消息的URI。圖1還示出了目標節(jié)點104向源節(jié)點102-1發(fā)送了拒絕108。拒絕108指示了目標節(jié)點104正在拒絕該提議并且將不會處理該消息或把該消息添加至目標節(jié)點的隊列。使用該信息,源節(jié)點102-1可進行其他安排來處理該消息或不使得該消息被處理。但是在任何情況下,源節(jié)點102-1都知道不要等待目標節(jié)點104處理該消息。在一些實施例中,這提供了資源效率,其中底層的線程或處理器將不需要被用于等待目標節(jié)點104變得可用。作為目標節(jié)點104拒絕提議106的結果或其中的一部分,目標節(jié)點可存儲關于該提議或與該提議相關的信息。例如,目標節(jié)點104可存儲標識源節(jié)點102提供的消息的指示符。如稍后將示出的,目標節(jié)點104可使用此信息來稍后要求先前在提議106中提供的完全相同的消息。然而,應當注意,在一些實施例中,可以不存儲和/或使用此信息,諸如目標節(jié)點104稍后僅從源節(jié)點要求任何信息。目標節(jié)點104可存儲的其他信息包括將源節(jié)點 102-1標識為其提議被拒絕的節(jié)點的信息。目標節(jié)點104可用此來稍后要求先前提供的消息,或源節(jié)點102-1必須提供的其他消息。以下將更詳細地示出各實施例。再次參考圖1,圖1示出了目標節(jié)點104向源節(jié)點102-1發(fā)送了請求消息。請求消息是從目標節(jié)點104至源節(jié)點102-1的指示目標節(jié)點104現在準備好處理來自源節(jié)點 102-1的消息的指示符。這可能是由于通過已經處理先前由目標節(jié)點104正在處理的消息, 目標節(jié)點104已釋放并且現在具有可用的處理資源。如以下將更詳細示出的,可用的處理資源可基于并發(fā)容量和/或緩沖區(qū)或隊列容量。
再次參考圖1,從源節(jié)點102-1向目標節(jié)點104發(fā)送消息112。在一些實施例中, 消息112可以是提議106中提供的消息。然而,如上所述以及如以下將更詳細示出的,消息 112可以是與源節(jié)點102-1具有的可用于處理的消息不同的消息。消息112然后可由目標節(jié)點104來處理、置于目標節(jié)點104處的隊列中供稍后處理或可執(zhí)行的某個其他動作?,F在參考圖2,示出了其中目標節(jié)點104包括接收多個消息來處理的能力的實施例。這可能是由于目標節(jié)點104具有緩沖能力和/或目標節(jié)點具有允許多個消息被并發(fā)處理的并發(fā)能力?,F在示出緩沖,請將注意力轉向圖2。圖2示出了目標節(jié)點104包括緩沖區(qū)116或具有與其相關聯的緩沖區(qū)116。緩沖區(qū)116可存儲消息以供目標節(jié)點104處理。在示出的特定示例中,緩沖區(qū)106能夠存儲六個消息供稍后處理。此示例僅是說明性的,可以另選或另外地使用不同大小的和/或動態(tài)調整大小的緩沖區(qū)。目標節(jié)點可接受消息來進行處理或基于緩沖區(qū)中可用容量發(fā)送諸如請求消息110之類的請求消息。圖2進一步示出了目標節(jié)點104的并發(fā)性。具體地,目標節(jié)點104能夠并發(fā)地執(zhí)行多個操作(此處概括地稱為118,但是在圖2中具體地示為118-1、118-2和118-3)。在示出的示例中,每一操作118都能夠處理消息。由此,在圖3所示的示例中,目標節(jié)點104 在任何給定的時間可處理九個消息,三個可以由操作118處理,六個可以存儲在緩沖區(qū)116中。在圖2示出的示例中,諸如提議106的提議可以是從多個不同的源節(jié)點(示為 102-1、102-2和102- 中的一個或多個發(fā)送的。盡管示出了三個節(jié)點,但是應當理解,可以使用任何數量的源節(jié)點。此外,在一些實施例中任何給定的節(jié)點都可發(fā)送不止一個提議,即使目標節(jié)點104先前已拒絕了提議106。如上所述,目標節(jié)點104可拒絕提議106。作為拒絕的一部分或是與其相關聯的, 目標節(jié)點104可存儲關于來自其的提議被拒絕的源節(jié)點的信息。如上所述,可以實現一些實施例,其中目標節(jié)點還可存儲關于與提議相關聯的具體消息的信息??梢詫崿F各實施例, 其中目標節(jié)點104可存儲關于多個源節(jié)點和/或多個消息的信息。例如,源節(jié)點102-1、102_2和102_3中的每一個可以發(fā)送類似于提議106的提議至目標節(jié)點104。目標節(jié)點可以向源節(jié)點102-1、102-2和102-3中的每一個發(fā)送諸如拒絕 108的拒絕。目標節(jié)點104還可存儲關于源節(jié)點102-1、102-2和102-3的信息。目標節(jié)點然后可確定它具有處理多個消息的能力,使用緩沖區(qū)116和/或處理多個操作118的并發(fā)能力,并由此可以使用關于源節(jié)點102-1、102-2和102-3的信息來發(fā)送諸如請求消息110(圖 1所示)之類的請求消息至源節(jié)點102-1、102-2和102-3中的每一個。另外地或另選地,單個源節(jié)點102可能已發(fā)送多個諸如提議消息106之類的提議消息至目標節(jié)點104。當目標節(jié)點104已確定它具有處理多個消息的能力時并且使用存儲的關于源節(jié)點的信息和/或消息,目標節(jié)點104可發(fā)送一個或多個諸如請求110之類的請求至源節(jié)點,請求與先前發(fā)送的提議相關聯的一些或全部消息。在一些實施例中,目標節(jié)點 104還可以僅存儲來自源的一個消息,覆寫關于先前提供的消息的任何信息。盡管在以上所示的示例中,目標節(jié)點104被示作響應于提議106發(fā)送拒絕108,但應當理解,在一些實施例中目標節(jié)點104具有可發(fā)送的其他可任選的消息。例如,盡管未示出,在目標節(jié)點104接收提議106時,目標節(jié)點可以使用指示提議106已被接收并且目標節(jié)點104正在接受目標中所標識的用于處理的消息的消息來響應。另選地,目標節(jié)點104可以發(fā)送拒絕提議的消息,并指示它將永不處理提議106中所標識的消息。另選地,目標節(jié)點 104可以發(fā)送拒絕提議106的消息,但指示在某個時間目標節(jié)點104將發(fā)送對于提議106所標識的消息或源節(jié)點102可提供的某個其他消息的請求110。源節(jié)點102然后可基于目標節(jié)點104提供的響應采取不同的動作。例如,如果源節(jié)點102接收到拒絕,其指示目標節(jié)點104將永不處理提議106中所標識的消息,那么源節(jié)點102就知道它將需要查找其他節(jié)點來處理提議106中所標識的消息。另選地,如果目標節(jié)點104接收到拒絕,其指示目標節(jié)點104可能在某個時間點以請求110返回,那么源節(jié)點 102可以延遲查找其他節(jié)點來處理提議106中所標識的消息。如所示出的,以上所述的各實施例可展示多種不同功能中的一個或多個。例如,實施例可展示在處理資源變得可用時自動取回消息的功能。實施例可展示通過消費者驅動的負載平衡在數據流網絡中的動態(tài)劃分功能。實施例可展示跟蹤被推遲的消息或提供這些消息的源以允許取回特定的消息或取回可用的最新消息的功能。實施例可展示并行處理被推遲的消息的功能。現在示出編碼的示例。具體地,代碼可以存儲在計算機可讀介質上并由一個或多個處理器執(zhí)行以實現各個數據流節(jié)點和其他功能。在當前的示例中,通過提供在數據可用時通知節(jié)點的能力的接口來表示目標數據流節(jié)點。以下示出了目標數據流塊的定義
public interface ITargetBlock<TInput> {
bool Post(TInput);
DataflowMessageStatus OfferMessage(
DataflowMessage<TInput> message,ISourceBlock<TInput> source, bool consumeToAccept);
void DeclinePermanentlyO;
}用戶代碼可以使用目標節(jié)點的Post (公布)方法以使數據進入節(jié)點,而連接到目標的源節(jié)點使用目標節(jié)點的OfferMessage (提供消息)方法將數據傳播至目標。可通知節(jié)點它們可通過調用DeclinePermanentlyO (永久拒絕)停止接受消息。在示出的示例中,OfferMessage接受三個參數正在提供的消息(該消息是圍繞實際數據的包裝,即消息載荷)、提供該消息的源的引用以及指示目標是否需要回調源來消費并承擔所提供的消息的所有權的布爾標志。數據流目標節(jié)點通常是“貪婪的”,意味著它們試圖接受公布和提供給它們的全部數據,而不管哪些其他目標節(jié)點也可以是從源鏈接的并且潛在地對該數據感興趣??梢杂性S多種目標節(jié)點,包括存在用于取得輸入數據并運行用戶代碼以處理所提供的消息的節(jié)點。例如var processor = new ActionBlock〈int>(i = > ProcessInteger (i));processor. Post (1);processor. Post (2);
這樣的節(jié)點也可以鏈接至源節(jié)點,使得來自源節(jié)點的數據通過使用OfferMessage 自動地傳播至目標。下面示出了鏈接節(jié)點var source = new TransformBlock<string, int> (s = > ParseForInt(s));var processor = new ActionBlock<int> (i = > ProcessInteger (i));source. LinkTo(processor);source. Post ( “1,,);source. Post ( “2,,);在默認的貪婪模式中,服從于開發(fā)人員施加的任何控制約束(例如,用于并發(fā)地處理處理消息的線程的最大數量),ActionBlockCHnput〉維持輸入隊列以存儲全部的輸入數據,并盡可能快地處理來自隊列的數據。使用無界限的輸入隊列,ActionBlock(動作塊)將不斷地接受提供給它的全部數據,對全部數據進行緩沖。這可能有一些不利的方面。首先,它限制了對如何緩沖數據的控制。例如,開發(fā)人員可能想要ActionBlock按優(yōu)先級次序來處理消息,使得在它去往緩沖區(qū)獲取下一個項目時,下一個項目是已經緩沖的項目中優(yōu)先級最高的項目。不使ActionBlock本身是關于它內部使用的隊列可配置的,那將是具有挑戰(zhàn)性的。其次,在源被鏈接至多個目標并且依次向每一目標提供消息的數據流網絡中,這樣的目標將阻止后續(xù)的目標獲得任何數據。在以下的示例中,目標processor〗將不會獲得任何數據。var source = new TransformBlock<string, int> (s = > ParseForInt(s));var processor1 = new ActionBlock<int> (i = > ProcessInteger (i));var processor2 = new ActionBlock<int> (i = > ProcessInteger (i));source. LinkTo (processor” ;source. LinkTo (processor2);為了解決這兩個問題,可將ActionBlock以及類似它的其他目標)配置為非貪婪的。在非貪婪時,它并不盲目地接受提供給它的全部消息。相反,它僅根據可配置的策略來接受消息。在極端情況下,可將節(jié)點配置為只有在輸入隊列為空并且該節(jié)點當前并沒有在處理任何消息時才接受消息??赡苡惺褂闷渌呗缘奶鎿Q實施例。例如,策略可以對隊列中所允許的可接受新消息的項目數量設置上限。如果檢查失敗且消息無法被接受,那么它就被推遲,意味著OfferMessage向源返回了 DataflowMessageMatus (數據流消息狀態(tài)),指示并沒有被承擔消息的所有權而節(jié)點將來可能想要該消息。同時,源能夠向其他節(jié)點提供消息。在目標返回已推遲時,它還將源和提供的消息的配對存儲至存儲器內映射中。這允許目標持續(xù)跟蹤已向它提供已被推遲的消息的源。在目標節(jié)點完成處理它當前的消息時, 它檢查輸入隊列以查看那里是否有任何可用的數據。如果有,它就從隊列中移除下一個項目并對它進行處理。如果它的輸入隊列中沒有元素,那么它就繼續(xù)檢查在它的已推遲的消息映射中是否有任何配對。如果有,它就根據某個策略移除一個并使用該信息回調相關的源。在這個時間點,目標節(jié)點具有若干選擇。可以使用各種策略來解決推遲。例如,隨機、 先入先出、后入先出等。通過在源上的ConsumeMessage (消費消息)方法,實施例可以實現
向源節(jié)點要求它所提供的確切消息public interface ISourceBlock<TOutput> {
DataflowMessage<TOutput> ConsumeMessage(DataflowMessage<TOutput> message, ITargetBlock<TOutput> target); bool TryReceive(out TOutput item);
}如果消息仍然是在源中可用的,那么ConsumeMessage將該消息的所有權傳遞至目標,返回相同的消息對象或僅由目標擁有的新的消息對象。目標然后可以處理那個消費的消息,如同該消息是來自目標的輸入隊列那樣。在它完成處理該消息時,它重復該過程。取代消費提供給目標的確切消息,目標還可以向源要求下一個可用的消息, 其可以是或也可以不是已提供的相同的消息。在以上示出的代碼示例中,這是使用 TryReceive (嘗試接收)方法來完成的。在替換實施例中,這可以通過將空(null)傳遞為以上所列出的簡化的IsourceBlocka源塊)接口中的消息參數。盡管這里沒有枚舉,可以實現多個不同的實施例來展示此功能。由于Post旨在由用戶代碼直接使用,它并不服從管理OfferMessage的同樣的貪婪/非貪婪行為。由此,即使OfferMessage正在推遲消息,通過Post提供的消息仍然可以存儲在輸入隊列中,實際上相比通過OfferMessage提供的消息具有優(yōu)先權。使用此非貪婪行為,在一些實施例中可實現多種益處。例如,在一些實施例中,節(jié)點的輸入隊列被鏈接的源有效地替換。這允許源處理以其認為合適的任何方式來處理消息。例如,源可以選擇向全部鏈接的目標提供消息,然后如果沒有目標接受該消息并且新的消息到達就丟棄該消息。如果這樣的節(jié)點被鏈接至ActionBlock,那么這允許ActionBlock 在它處理的下一個消息總是最新近到達的消息的模式中操作。示出另一示例,源可以是優(yōu)先級緩沖區(qū),對消息進行排序并根據這些消息的優(yōu)先級度量來提供它們;非貪婪鏈接的 ActionBlock然后將按照優(yōu)先級次序消費并處理消息。作為可實現的益處的另一示例,一些實施例可使用異步的基于拉(pull-based) 的模型來實現簡單的負載平衡。如果源被連接至多個目標,例如每個核心一個,并且這些節(jié)點中的每一個完成相同的處理,每個節(jié)點都可被配置為非貪婪的。源將向全部目標提供消息,其中目標將僅在它們準備好處理更多工作時才消費數據。這允許源在變化且動態(tài)數量的目標上傳遞負載平衡。例如,在一組動態(tài)目標中,數據流目標可以在任何時間從源鏈接或斷開。有許多這樣的節(jié)點可參與這種非貪婪處理,包括對每一消息執(zhí)行動作的節(jié)點(例如,ActionBlock<TInput>)、對每一消息運行函數并對每一消息產生單個輸出的節(jié)點(例如,TransformBlock<TInput, T0utput> (傳輸塊)),或者對每一消息運行函數并對每一消息產生一組輸出的節(jié)點(例如,TransformManyBlocKTInput, T0utput> (變換許多塊))。如以上在圖2中所示的,這樣的節(jié)點可被配置為并發(fā)地完成它們內部的處理,意味著它們可支持大于1的并行度,使得多個消息可以被并行地處理。節(jié)點所采用的每一工作者可以遵循先前概述的相同的算法,首先檢查數據的輸入隊列,然后從源取回推遲的消息。這意味著節(jié)點也能夠從多個源取回推遲的消息。以下討論現涉及可以執(zhí)行的多種方法以及方法動作。雖然用特定次序討論或用以
特定次序發(fā)生的流程圖示出了各個方法動作,但除非明確規(guī)定否則不需要特定次序,或因為一動作依賴于另一動作在執(zhí)行該動作之前完成而需要特定次序?,F在參考圖3,示出了方法300。方法300示出了可以在計算環(huán)境中實施的方法。 方法300包括處理消息的動作。方法300包括在第一實體處從第二實體接收將處理的第一消息的第一提議(動作302)。例如在圖1中所示的,源節(jié)點102-1可以發(fā)送提議106至目標節(jié)點104。例如,在一些實施例中,第二實體可以發(fā)送消息至第一實體,其中第一實體可以選擇進行處理或者可以向第二實體發(fā)回消息,指示該消息將不會被處理。另選地,第二實體可發(fā)送通知消息至第一實體,指示第一消息可用來處理。方法300還包括第一實體決定并不處理第一消息(動作304)。具體地,在一些實施例中,第一實體可以并不具有處理能力或開放來接受用于處理的消息的緩沖資源。由此, 第一實體可以決定并不處理第一消息。在圖1中所示的示例中,目標節(jié)點104可以決定并不處理第一消息(例如,消息112)。作為決定并不處理第一消息的結果,方法300還包括向第二實體這樣指示。具體地,第一實體可以向第二實體指示第一實體將并不會處理該消息(動作306)。作為示例, 圖1示出了從目標節(jié)點104向源節(jié)點102-1發(fā)送拒絕108,指示目標節(jié)點104正在拒絕提議 106并且將不會處理該消息。作為決定并不處理第一消息的結果,方法300還包括存儲第二實體已提供消息的指示(動作308)。該指示包括與第二實體相關的指示符。例如,在目標節(jié)點104向源節(jié)點 102-1發(fā)送拒絕108時,目標節(jié)點104可存儲指示源節(jié)點102-1已向目標節(jié)點發(fā)送提議106 的信息。該信息可附加地包括關于提供的特定消息的信息,但是如以下所示,在一些實施例中并不需要該信息。方法300還包括,在向第二實體指示后,使用該指示,向第二實體指示處理消息的可用性(動作310)。例如,圖2示出了請求消息110正從目標節(jié)點104發(fā)送至源節(jié)點102-1, 以指示處理消息的可用性??梢詫嵤┓椒?00,其中使用該指示,向第二實體指示處理消息的可用性包括向第二實體指示想要處理第一消息。例如,目標節(jié)點可以發(fā)送具體標識了提議106中所標識的特定消息的請求消息110。在替換實施例中,可以實施方法300,其中向第二實體指示處理消息的可用性是基于第一節(jié)點處的緩沖能力和/或基于并發(fā)能力并且第一實體先前并沒有處理該消息,而被執(zhí)行為對先前向第一實體提供消息的多個實體的一組指示符的一部分。例如,如圖2中所示,多個源節(jié)點102-1、102-2和102-3可能已向目標節(jié)點014發(fā)送提議。目標節(jié)點先前可能已向這些源節(jié)點中的每一個發(fā)送了拒絕,但是現在緩沖區(qū)116中有空間和/或并發(fā)處理操作118的可用性。由此,目標節(jié)點104可以發(fā)送消息至多個源節(jié)點,指示可用性或請求用于處理的消息(諸如圖1中所示的消息112)。目標節(jié)點104可以接受目標可存儲的數據。 具體地,目標節(jié)點104可以選擇推遲處理,因為它已經到達它想要緩沖的極限。類似地,推遲決定可以基于并發(fā)能力并基于緩沖。例如,目標104可以選擇推遲因為它已經在處理消息,由此它想要將它的最大緩沖區(qū)大小設置為0使得它在處理時并不緩沖任何東西。一旦它完成處理,目標節(jié)點的最大緩沖區(qū)大小就可以是1,使得在目標節(jié)點104向上自旋一個任務來完成異步處理時傳入的消息可以被緩沖。該任務的第一個動作將是移除臨時存儲在緩沖區(qū)中的消息。
在替換實施例中,可以實施方法300,其中使用該指示,向第二實體指示處理消息的可用性包括向第二實體隱式或顯式地指示想要處理第二實體所提供的多個消息中最近一個提供的消息。例如,圖1中所示的源節(jié)點102-1可能已發(fā)送了多個提議106,每一個對應于不同的消息112。在具有接受消息的能力時,目標節(jié)點104可以使用請求消息110向源節(jié)點102-1指示發(fā)送與最新近接收的提議106相關聯的消息112。在替換實施例中,可以實施方法300,其中使用該指示,向第二實體指示處理消息的可用性包括向第二實體指示想要處理第二實體所提供的多個消息中任何提供的消息。例如,在圖1中所示的示例中,請求消息Iio可以是來自源節(jié)點102-1的任何消息112都是可接受的顯式或隱式的指示。具體地,請求消息110可以包括任何消息都是可接受的指示。在替換實施例中,由于正被發(fā)送,請求消息110可以是任何消息都是可接受的指示。在替換實施例中,可以實施方法300,其中使用該指示,向第二實體指示處理消息的可用性包括基于第一實體的并發(fā)能力,向第二實體指示想要處理第二實體所提供的多個消息中提供的給定數量的消息。例如,目標節(jié)點104可在單個請求消息110中指示給定數量的消息可被處理。另選地,目標節(jié)點104可發(fā)送給定數量的目標節(jié)點104能夠進行處理的請求消息110,每個消息112 —個。此外,該方法可以由包括一個或多個處理器和諸如計算機存儲器等計算機可讀介質的計算機系統(tǒng)來實施。具體而言,計算機存儲器可以存儲計算機可執(zhí)行指令,計算機可執(zhí)行指令在由一個或多個處理器執(zhí)行時使得執(zhí)行各種功能,如在各實施方式中所述的那些動作。本發(fā)明的各實施例可以包括或利用含有計算機硬件的專用或通用計算機,這將在以下做出進一步討論。本發(fā)明范圍內的各實施例還包括用于攜帶或存儲計算機可執(zhí)行指令和/或數據結構的物理介質和其他計算機可讀介質。這些計算機可讀介質可以是通用或專用計算機系統(tǒng)能夠訪問的任何可用介質。存儲計算機可執(zhí)行指令的計算機可讀介質是物理存儲介質。攜帶計算機可執(zhí)行指令的計算機可讀介質是傳輸介質。由此,作為示例而非限制,本發(fā)明的各實施例可包括至少兩種完全不同類型的計算機可讀介質物理計算機可讀存儲介質和傳輸計算機可讀介質。 物理計算機存儲介質包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲(如CD、DVD
等)、磁盤存儲或其他磁存儲設備、或可用于存儲計算機可執(zhí)行指令或數據結構形式的所需程序代碼裝置且可由通用或專用計算機訪問的任何其他介質?!熬W絡”被定義為允許在計算機系統(tǒng)和/或模塊和/或其他電子設備之間傳輸電子數據的一個或多個數據鏈路。盡管“網絡”定義如此,但此定義并不一定是限制的或可應用于如上所述的“數據流網絡”。當信息通過網絡或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當地視為傳輸介質。傳輸介質可包括可用于攜帶計算機可執(zhí)行指令或數據結構形式的所需程序代碼裝置且可由通用或專用計算機訪問的網絡和/或數據鏈路。以上介質的組合也被包括在計算機可讀介質的范圍內。此外,在到達各種計算機系統(tǒng)組件時,以計算機可執(zhí)行的指令或數據結構的形式存在的程序代碼裝置可以自動地從傳輸計算機可讀介質傳輸到物理計算機可讀存儲介質 (或者反之亦然)。例如,通過網絡或數據鏈路接收到的計算機可執(zhí)行指令或數據結構可被緩存在網絡接口模塊(例如,“NIC”)內的RAM中,然后最終被傳送到計算機系統(tǒng)RAM和/ 或計算機系統(tǒng)處的較不易失性的計算機可讀物理存儲介質。因此,計算機可讀物理存儲介質可被包括在同樣(或甚至主要)利用傳輸介質的計算機系統(tǒng)組件中。計算機可執(zhí)行指令包括,例如使通用計算機、專用計算機、或專用處理設備執(zhí)行某一功能或某組功能的指令和數據。計算機可執(zhí)行指令可以是例如二進制代碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結構特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實現權利要求的示例形式而公開的。本領域的技術人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網絡計算環(huán)境中實踐,這些計算機系統(tǒng)配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持式設備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子設備、網絡PC、小型計算機、大型計算機、移動電話、PDA、尋呼機、路由器、交換機等等。本發(fā)明也可在其中通過網絡鏈接(或者通過硬連線數據鏈路、無線數據鏈路,或者通過硬連線和無線數據鏈路的組合)的本地和遠程計算機系統(tǒng)兩者都執(zhí)行任務的分布式系統(tǒng)環(huán)境中實施。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設備二者中。本發(fā)明可具體化為其他具體形式而不背離其精神或特征。所描述的實施例在所有方面都應被認為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權利要求書而非前述描述指示。落入權利要求書的等效方案的含義和范圍內的所有改變被權利要求書的范圍所涵蓋。
權利要求
1.一種在計算環(huán)境中處理消息的方法,所述方法包括在第一實體(104)處,從第二實體(102-1)接收將處理(302)第一消息(112)的第一提議(106);決定不處理所述第一消息(112) (304);作為決定不處理所述第一消息(112)的結果,向所述第二實體(306)這樣指示(108);作為決定不處理所述第一消息(112)的結果,存儲所述第二實體(102-1)已提供消息的指示,所述指示包括相關于所述第二實體(308)的指示符;以及在對所述第二實體(102-1)進行指示后,使用所述指示向所述第二實體(102-1)指示處理消息(310)的可用性。
2.如權利要求1所述的方法,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括向所述第二實體指示想要處理所述第一消息。
3.如權利要求1所述的方法,其特征在于,其中向所述第二實體指示處理消息的可用性是基于并發(fā)能力以及所述第一實體先前并沒有處理消息而被執(zhí)行為對先前已向所述第一實體提供消息的多個實體的一組指示符的一部分。
4.如權利要求1所述的方法,其特征在于,其中向所述第二實體指示處理消息的可用性是基于輸入緩沖區(qū)的可用容量而被執(zhí)行為對先前已向所述第一實體提供消息的多個實體的一組指示符的一部分。
5.如權利要求1所述的方法,其特征在于,其中向所述第二實體指示處理消息的可用性是基于輸入緩沖區(qū)的可用容量以及所述第一實體的并發(fā)能力而被執(zhí)行為對先前已向所述第一實體提供消息的多個實體的一組指示符的一部分。
6.如權利要求1所述的方法,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括向所述第二實體指示想要處理由所述第二實體提供的多個消息中提供的最近一個消息。
7.如權利要求1所述的方法,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括向所述第二實體指示想要處理由所述第二實體提供的多個消息中提供的任何消息。
8.如權利要求1所述的方法,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括基于所述第一實體的并發(fā)能力,向所述第二實體指示想要對處理由所述第二實體提供的多個消息中提供的給定數量的消息。
9.如權利要求1所述的方法,其特征在于,其中從第二實體接收第一提議包括接收所述第一消息。
10.如權利要求1所述的方法,其特征在于,其中從第二實體接收第一提議包括接收所述第一消息可用于處理的指示。
11.一種在計算環(huán)境中包括計算機可執(zhí)行指令的計算機可讀介質,所述計算機可讀指令在被一個或多個處理器執(zhí)行時使得以下步驟被執(zhí)行在第一實體(104)處,從第二實體(102-1)接收將處理(302)第一消息(112)的第一提議(106);決定不處理所述第一消息(112) (304);作為決定不處理所述第一消息(112)的結果,向所述第二實體(306)這樣指示(108);作為決定不處理所述第一消息(112)的結果,存儲所述第二實體(102-1)已提供消息的指示,所述指示包括相關于所述第二實體(308)的指示符;以及在對所述第二實體(102-1)進行指示后,使用所述指示向所述第二實體(102-1)指示處理消息(310)的可用性。
12.如權利要求11所述的計算機可讀介質,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括向所述第二實體指示想要處理所述第一消息。
13.如權利要求11所述的方法,其特征在于,向所述第二實體指示處理消息的可用性是基于并發(fā)能力以及所述第一實體先前并沒有處理消息,而被執(zhí)行為對先前向所述第一實體提供所述消息的多個實體的一組指示符的一部分。
14.如權利要求11所述的方法,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括向所述第二實體指示想要處理由所述第二實體提供的多個消息中提供的最近一個消息。
15.如權利要求11所述的方法,其特征在于,使用所述指示向所述第二實體指示處理消息的可用性包括向所述第二實體指示想要處理由所述第二實體提供的多個消息中提供的任何消息。
全文摘要
本發(fā)明涉及數據流網絡中的執(zhí)行節(jié)點的非貪婪消費。在數據流網絡中處理消息。該方法包括,在第一實體處,從第二實體接收將處理第一消息的第一提議。該方法還包括決定并不處理第一消息。作為決定并不處理第一消息的結果,向第二實體作出這樣的指示。還是作為決定并不處理第一消息的結果,存儲第二實體已提供消息的指示。該指示包括與第二實體相關的指示符。在對第二實體進行指示后,使用該指示該方法包括向第二實體指示處理消息的可用性。
文檔編號H04L12/56GK102571567SQ20111044011
公開日2012年7月11日 申請日期2011年12月16日 優(yōu)先權日2010年12月17日
發(fā)明者D·C·馬努, M·L·楚, S·H·托布 申請人:微軟公司