對事務存儲器中的副作用動作的事務處理的製作方法
2023-10-08 13:55:44 1
專利名稱:對事務存儲器中的副作用動作的事務處理的製作方法
對事務存儲器中的副作用動作的事務處理背景用於共享存儲器多處理器的並發編程可以包括供多個線程訪問相同數據的能力。 該多個線程在多個處理器、多個處理器核心或附連到在處理器之間共享的存儲器的其他種類的並行性上執行。共享存儲器模型是最常部署的多線程通信方法。它允許以與順序編程大致相同的方式創建多線程程序,這是有益的,因為並發編程本身是出了名地困難。為了實現共享存儲器模型,並發編程小心地避免可能造成諸如競爭等不合需要的情形的並發訪問和使用共享數據。鎖是避免並發訪問共享數據問題的一種常見解決方案。鎖是以下面的前提為中心的由一個線程訪問的變量將也可由其他線程訪問,並且由此變量一次次只能由一個線程使用。鎖允許一個線程控制變量而防止其他線程改變該變量直至它被解鎖。雖然基於鎖的協議是流行的,但是通常認為它們是難以使用的。以粗粒度的方式使用鎖保護了相對較大量的數據,但是一般而言它們的使用不伸縮。線程即使在它們在不幹涉時也彼此阻塞,並且鎖成為爭用源。或者,以更精細粒度的方式使用鎖而同時緩解伸縮性問題引入了其他問題, 因為用於確保正確性並避免死鎖的鎖約定變得複雜且易於出錯。另一解決方案是使用諸如軟體事務存儲器等事務存儲器和/或使用編譯器來實現應用程式,軟體事務存儲器提供軟體運行時程序庫和/或運行時執行環境中的語義。事務存儲器是用於基於以下前提來控制對共享存儲器的訪問的並發控制機制由一個線程使用的變量將不太可能被其他線程訪問,且由此該變量可以在不對程序的可伸縮性造成惡劣結果的情況下。基於粗糙鎖的協議上的事務存儲器的一個顯著好處是提高的並發性。在事務存儲器中,線程都無需等待訪問數據,且不同的線程可以安全且同時修改數據結構中的通常在同一個鎖保護下的不相交的部分。不管重試失敗的事務的開銷,在大多數現實的並發程序中,衝突出現得足夠罕見,以使得即使在少量處理器和處理器核上在基於粗粒度鎖的協議上有極大的性能增益。然而,如果原子塊包括副作用動作,則可能在使用事務存儲器時發生問題。一般而言,副作用動作修改在當前線程之外可見的某個狀態。副作用動作的常見示例包括輸入 /輸出、系統調用、傳統代碼動作、內核動作、設備管理、託管環境之外的其他域中的動作等。 如果中止並重新執行事務就會產生困難,因為副作用動作被重新執行並且可以在重複失敗時被多次重複執行。非冪等副作用造成最大的困難。例如,由於與其他線程的存儲器衝突, 包括遞增變量的動作和列印變量的副作用動作的原子塊可以重複地失敗並重新執行。在意圖僅列印一次變量的情況下,在每次重新執行時列印變量是不合需要的。其他解決方案已試圖解決在事務存儲器中使用的副作用動作的問題。一種流行的解決方案是簡單地禁止使用這種副作用動作,但是許多研究人員一般同意對可編程性以及合成的限制在一般的使用中是不可接受的。其他提議的解決方案推遲動作直至它可能要提交,但是許多研究人員相信對動作重新排序導致非預期結果。相似地,將補償塊與動作相關聯減少隔離並且提供了另一隱錯源。又一提議的解決方案是不允許帶有副作用動作的事務失敗並且有利於帶有副作用動作的事務來解決所有衝突。當然,一次只允許不超過一個帶有副作用動作的事務。還有一解決方案是打破事務的原子性和隔離。所有這些提議的解決方案和其他解決方案以不同的方式受到限制,並且要求程式設計師的很大的努力。研究人員一般同意該問題還未被解決。概述提供本概述以便以簡化形式介紹將在以下詳細描述中進一步描述的一些概念。本概述並不旨在標識出所要求保護的主題的關鍵因素或必要特徵,也不旨在用於限定所要求保護的主題的範圍。在一個實施例中,一種處理系統處理具有副作用動作的原子事務。該事務是具有多個線程的並發程序中的線程的一部分。該系統包括事務存儲器、第一和第二資源管理器和事務管理器。第一資源管理器加入原子事務並管理與副作用動作相關的資源。第二資源管理器加入原子事務並管理事務存儲器。事務管理器耦合到第一和第二資源管理器並且接收來自第一和第二資源管理器的關於是否提交事務的投票。副作用動作被延遲直至事務提交之後或者與針對該副作用動作的補償動作一起應用。附圖簡述包括、合併在本發明書內並構成其一部分的附圖提供了對各實施例的進一步理解。附圖示出各實施例,並且與說明書一起用於解釋本發明的原理。其他實施例和各實施例的許多預期優點將隨著參考下面的詳細描述進行更好的理解而得到認識。附圖的元素不一定相對於彼此而縮放。相同的附圖標記指代對應的類似部分。
圖1是示出實現本發明的特徵的計算設備的許多可能的示例之一的框圖。圖2是示出圖1的示例計算系統中的示例事務系統的框圖。圖3是示出在圖2的事務系統中使用的示例過程的流程圖。詳細描述在以下詳細描述中,對附圖進行了參考,附圖構成了實施例的一部分且在其中作為示例示出了可在其中實踐本發明的各特定實施例。可以理解,可以使用其它實施例並且可以做出結構上或邏輯上的改變而不背離本發明的範圍。因此,以下詳細描述並不旨在限制,並且本發明的範圍由所附權利要求來限定。還應理解,此處描述的各示例性實施例的特徵可相互組合,除非另外具體註明。圖1示出了可用作操作環境並且包括諸如計算設備100之類的計算設備的是理想拿給計算機系統。在一基本配置中,計算設備100通常包括具有至少兩個處理單元(即,處理器102)的處理器體系結構以及存儲器104。取決於計算設備的確切配置和類型,存儲器 104可以是易失性的(如隨機存取存儲器(RAM))、非易失性的(諸如只讀存儲器(ROM)、快閃記憶體等)或兩者的某種組合。該基本配置在圖1中由線條106來例示。該計算設備可採取若干形式中的一種或多種。這些形式包括個人計算機、伺服器、手持式設備、消費電子產品能 (諸如視頻遊戲控制臺)或其他設備。計算設備100還可具有附加特徵/功能。例如,計算設備100還可包括附加存儲 (可移動和/或不可移動),包括但不限於磁碟或光碟或固態存儲器,或者閃速存儲設備, 諸如可移動存儲108和不可移動存儲110。計算機存儲介質包括以用於存儲諸如計算機可讀指令、數據結構、程序模塊或其他數據等的任何合適的方法或技術實現的易失性和非易失性、可移動和不可移動介質。存儲器104、可移動存儲108和不可移動存儲110都是計算機存儲介質的示例。計算機存儲介質包括,但不限於,RAM、R0M、EEPR0M、快閃記憶體或其它存儲器技術、CD-ROM、數字多功能盤(DVD)或其它光碟存儲、磁帶盒、磁帶、磁碟存儲或其它磁性存儲設備、通用串行總線(USB)快閃記憶體驅動器、快閃記憶體卡、或能用於存儲所需信息且可以由計算設備100訪問的任何其它介質。任何這樣的計算機存儲介質都可以是計算設備100的一部分。計算設備100包括允許計算設備100與其它計算機/應用程式/用戶115通信的一個或多個通信連接114。計算設備100還可包括諸如鍵盤、定點設備(例如,滑鼠)、筆、 語音輸入設備、觸摸輸入設備等的輸入設備112。計算設備100還可包括諸如顯示器、揚聲器、印表機等的輸出設備111。計算系統100可被配置成運行作業系統軟體程序以及一個或多個軟體應用程式, 這些程序構成系統平臺。在一個示例中,計算系統100包括被稱為託管環境的軟體組件。託管環境可被包括為作業系統的一部分或者可在稍後被包括為軟體下載。託管環境通常包括針對常見編程問題的預先編碼的解決方案以幫助軟體開發者創建諸如應用程式等在託管環境中運行的軟體程序,並且該託管環境通常還包括虛擬機,該虛擬機允許軟體應用程式在託管環境中運行以使得程式設計師不必考慮特定處理器102的能力。圖2示出了示例性事務處理系統200,可以在託管環境中調用該事務處理系統以支持帶有事務存儲器動作204和副作用動作206的原子塊事務202。系統200包括諸如存儲器資源管理器208和副作用資源管理器210之類的至少兩個資源管理器,這兩個資源管理器加入事務202中並且分別對應於動作204和206。資源管理器208、210各自管理參與事務202的動作適當資源212、214。資源管理器208、210的動作與事務管理器216協調,後者與資源管理器208、210 —起工作以確保事務202的原子性和隔離。事務管理器216實現提交協議218。資源管理器208、210也參與提交協議218。事務202是由單個線程執行的綁定到一起的動作序列。綁定到一起的動作的示例包括原子動作。線程完成對共享存儲器中數據的修改,而不考慮在其他處理器上並發運行的其他線程。在完成了事務之後,事務存儲器驗證其他線程未對所訪問的數據作出並發改變。確認改變並且如果確認成功,則在提交操作中使改變成為永久的。如果確認失敗,則就撤消或「回退」改變,並且重新執行事務202直至確認成功。事務擁有原子性和隔離的特徵。事務是原子的並且在邏輯上是立即執行的。如果一個動作失敗,則整個事務失敗。同樣,事務與其他線程隔離,因為在它們的中間狀態中不向其他線程展示任何變量。當達到塊的末尾時,提交、中止或回退和重新執行事務。因此, 提交或失敗的單元是事務而非整個進程,且狀態返回到其原始形式而非展示中間變量。資源管理器存在於傳統的事務處理中,並且管理傳統事務中的資源。但是傳統的事務處理至今為止還未被用於自動地解決對存儲器的並發訪問,傳統的事務處理通常使用鎖。不像不控制對共享存儲器的訪問的傳統事務,本示例的特徵是事務存儲器的管理是事務的一部分。如上所述,事務存儲器提議一般地通過為開發人員知道如何處理的有限的錯誤情況集手動地製作解決方案來提供恢復功能,結果損害了生產力和質量結果。然而,本發明的示例將事務存儲器包含到某些主流事務處理中。託管環境也可以提供或包括用於事務存儲器環境中的預期動作的預先編程的適當的資源管理器。預先編程的資源管理器可以包括在當要使用資源時可以在管理環境中調用的庫中。在其中當適當的資源管理器不存在於用於託管事務存儲器環境的資源管理器的預先編程的庫中的許多情況下,程序開發人員可以編寫資源管理器以供在程序中使用或將它添加到庫中。在一個示例中,資源管理器208、210被實現為易失性資源管理器而非持久性資源管理器。易失性資源管理器將它們的狀態存儲在易失性存儲器中並且不支持事務的狀態恢復。在事務處理系統200的情況下,易失性資源管理器比持久性資源管理器使用更少的系統資源。與多個易失性資源管理器很好地一起工作的示例性事務管理器216是可用的輕量事務管理器,該輕量事務管理器可以顯著地減少由更持久的事務管理器導致的開銷。其他示例可以包括持久性事務管理器或資源管理器。資源管理器208、210自動地加入事務202,並且依照事務的結果提交或回退對它們的狀態作出的改變。託管環境可以自動化事務中的加入以及就事務資源212、214對事務的管理。當將資源212、214加入到事務202中時,事務通知資源動作204、206希望對資源執行事務工作。動作204、206接著對資源212、214執行動作,且如果不發生錯誤,則事務管理器216應用提交協議218以要求資源212、214通過資源管理器208、210提交對其狀態作出的改變。如果資源管理器208、210中任何一個遇到錯誤,則事務管理器216會導致回退在事務中作出的所有改變。否則,事務管理器216會導致提交事務。在任一情況下,事務管理器216可以將決定通知給資源管理器208、210。在一個示例中,在另一資源管理器加入事務202之前,存儲器資源管理器208擔當事務管理器。一旦諸如副作用動作資源管理器210之類的另一資源管理器加入,則事務處理系統200將事務202提升為採用事務管理器216的事務202,並且存儲器資源208成為資源管理器。在包括副作用動作在事務存儲器中的示例性事務202中,至少將兩個資源管理器 208,210加入到事務中。副作用動作206是對資源214產生不利影響的動作的良好示例。 事務存儲器動作204也實現資源管理器以管理其存儲器改變。如果事務包括其他副作用動作,則可以部署其他資源管理器。資源管理器210延遲副作用動作直至事務管理器216確認所有加入的資源管理投票決定提交事務之後。因此,在與其他並發執行的線程存儲器衝突的情況下(如果在確認階段之前作出衝突,一般會導致事務回退),不重新執行或重複地重新執行副作用動作。開發人員可以以適當的方式實現延遲副作用動作。在上述副作用列印動作的示例中,資源管理器延遲列印直至事務存儲器確定事務不涉及與其他線程的存儲器衝突。在事務管理器 216調用提交協議218之前,用於列印操作的資源管理器可以在存儲器中編寫行。在事務管理器216將提交通知給資源管理器之後,資源管理器會訪問存儲器中的該行並列印它。存在開發人員以適於給定情況和示例類型的副作用動作的方式實現延遲副作用動作的其他類似的示例。可以將方便的句法提供給開發人員以便於更容易地表達資源管理器210的延遲的動作。例如,內聯延遲動作可以包括如下的句法
權利要求
1.一種存儲計算機可執行指令的計算機可讀存儲介質,所述計算機可執行指令用於控制包括對包括多個線程的並發程序的處理操作的計算機系統,其中所述多個線程中的至少一個包括具有副作用動作206的原子事務202,所述計算機可執行指令包括事務存儲器212,其被配置成控制所述多個線程對共享存儲器104的訪問;第一資源管理器210,其被配置成加入所述原子事務202並管理與所述副作用動作206 相關的資源;第二資源管理器208,其被配置成加入所述原子事務並管理所述事務管理器212 ;以及事務管理器216,其耦合到所述第一和第二資源管理器208、210,其中所述事務管理器 216被配置成從所述第一和第二資源管理器208、210接收關於提交所述事務的投票,並且其中所述副作用動作206是被延遲直至事務提交之後或與針對所述副作用動作的補償動作一起應用中的至少一個。
2.如權利要求1所述的計算機可讀介質,其特徵在於,所述第一和第二資源管理器是易失性資源管理器。
3.如權利要求2述的計算機可讀介質,其特徵在於,所述事務管理器是輕量事務管理ο
4.如權利要求1所述的計算機可讀介質,其特徵在於,第一和第二資源管理器被包括在具有多個資源管理器的庫中,所述多個資源管理器選擇性地可供加入具有副作用動作的原子事務。
5.如權利要求4述的計算機可讀介質,其特徵在於,所述多個資源管理器中的至少一個資源管理器在託管環境中被預先編程。
6.如權利要求1所述的計算機可讀介質,其特徵在於,所述事務管理器被配置成接收提交協議以確定是否提交所述事務。
7.如權利要求1所述的計算機可讀介質,其特徵在於,所述提交協議是包括準備階段和提交階段的兩階段提交協議。
8.如權利要求1所述的計算機可讀介質,其特徵在於,所述副作用動作選擇包括以下各項的組輸入或輸出動作、系統調用、傳統代碼動作、內核動作、設備管理、以及所述託管環境之外的其他域中的動作。
9.如權利要求8所述的計算機可讀介質,其特徵在於,所述副作用動作是列印動作。
10.一種控制具有副作用動作的原子事務的方法,所述方法包括加入304至少一個非存儲器資源管理器210 ;加入304被配置成管理事務存儲器212的存儲器資源管理器208 ;調用被配置成確定所述非存儲器和存儲器資源管理器是否投票同意提交所述事務的提交協議308 ;如果所述非存儲器和存儲器資源管理器投票同意提交所述事務,則提交314所述事務,並且在提交所述事務之後應用所述副作用動作;如果所述存儲器資源管理器208未投票同意提交所述事務,但是所述非存儲器資源管理器210投票同意提交所述事務,則重新執行312所述事務,其中所述副作用動作206是在重新執行所述事務的情況下不應用或者在重新執行所述事務的情況下與補償動作一起應用中的至少一個;如果所述非存儲器資源管理器210中的至少一個未投票同意所述事務,則中止318所述事務,其中如果中止所述事務,則不應用所述副作用動作206。
11.如權利要求10所述的方法,其特徵在於,所述原子事務包括原始狀態並且其中重新執行所述事務包括回退到所述原始狀態。
12.如權利要求11所述的方法,其特徵在於,重新執行所述事務包括重新執行所述事務直至所述非存儲器和存儲器資源管理器投票同意提交所述事務或所述事務被中止。
13.如權利要求11所述的方法,其特徵在於,在提交所述事務時使對所述原始狀態的改變變得持久。
14.如權利要求10所述的方法,其特徵在於,重新執行所述事務包括將開放式補償動作應用於所述副作用動作。
15.如權利要求10所述的方法,其特徵在於,提交所述事務包括應用延遲的動作。
16.如權利要求10所述的方法,其特徵在於,確定第一和第二資源管理器是否投票同意提交所述事務包括對每一個加入的資源管理器調用方法以獲取關於所述事務的對應投苗ο
17.如權利要求10所述的方法,其特徵在於,如果不存在存儲器衝突,則所述存儲器資源管理器投票同意提交。
18.一種託管環境,其在計算設備上操作且被配置成操作具有包括副作用動作206的原子事務202的應用程式,所述託管環境包括事務存儲器212;資源管理器的庫,其中所述資源管理器208、210中的至少兩個被配置成由所述應用程式加入並且被加載到所述計算設備上的易失性存儲器104中,其中所述資源管理器之一是被配置成加入管理與所述副作用動作相關的資源214的副作用資源管理器210,而另一資源管理器是被配置成加入管理所述事務存儲器212的存儲器資源管理器208 ;以及事務管理器216,其被加載到所述易失性存儲器106中並且耦合到所加入的資源管理器208、210,其中所述事務管理器被配置成從所加入的資源管理器接收關於是否提交所述事務的投票,其中所述存儲器資源管理器208取決於在所述事務期間是否發生存儲器衝突 312來投票。
19.如權利要求18所述的託管環境,其特徵在於,所述計算設備包括多個處理器,並且其中所述原子事務被包括在具有多個並發線程的應用程式的線程上。
20.如權利要求19所述的託管環境,其特徵在於,所述事務存儲器控制對所述計算設備上的共享數據的訪問。
全文摘要
一種處理系統包括事務存儲器、第一和第二資源管理器和用於並行程序的事務管理器,該並行程序具有包括具有副作用動作的原子事務的線程。該第一資源管理器被配置成加入該原子事務並且管理與該副作用動作相關的資源。該第二資源管理器被配置成加入該原子事務並且管理該事務存儲器。該事務管理器耦合到第一和第二資源管理器並且管理器被配置成從第一和第二資源管理接收關於是否提交該事務的投票。該副作用動作被延遲直至該事務提交之後或與針對該副作用動作的補償動作一起應用。
文檔編號G06F9/06GK102187321SQ200980142416
公開日2011年9月14日 申請日期2009年10月16日 優先權日2008年10月20日
發明者D·格羅夫, A·達迪歐莫夫, Y·萊瓦諾尼 申請人:微軟公司