亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

使用協(xié)程和線程的協(xié)同調度的制作方法

文檔序號:6563088閱讀:120來源:國知局
專利名稱:使用協(xié)程和線程的協(xié)同調度的制作方法
技術領域
本發(fā)明的一些實施例涉及提供計算任務的分支執(zhí)行的系統(tǒng)。更具體地說,本發(fā)明的一些實施例與利用協(xié)程(coroutine)和線程來協(xié)同(cooperatively)執(zhí)行各種任務的進程(process)相關。
背景技術
軟件應用可以包括用來執(zhí)行兩個或多個任務的程序代碼。盡管這些任務可能表現出各種相互依賴性(interdependency),但每個任務通??梢员豢醋魈峁┮粋€或多個專用功能。為了優(yōu)化應用效率和/或資源利用率,可以由線程或者在協(xié)程中執(zhí)行任務。
線程與寄存器組和執(zhí)行堆棧相關。進程是一個或多個線程的容器,所述一個或多個線程中的每一個共享進程的狀態(tài)信息、存儲器地址空間和其它資源。操作系統(tǒng)可以通過在專用處理器時隙中運行每個線程來調度多線程進程的線程。并且,多線程進程可以利用定時器、線程間信令和/或其它機制來控制線程調度。
協(xié)程與獨立的寄存器組和執(zhí)行堆棧相關。當一個協(xié)程第一次被調用時,執(zhí)行從它的執(zhí)行堆棧的起點開始。對于其后的對該協(xié)程的調用,執(zhí)行從該協(xié)程最后調用另一個協(xié)程的點恢復。因此,協(xié)程可以在其相關任務完成之前讓渡(yield),并且該任務可以通過后續(xù)對該協(xié)程的調用而恢復(resume)。協(xié)程切換(switch)消耗的處理器開銷一般比線程切換少,因此系統(tǒng)程序切換可以提供更快的任務分派(dispatch)。
協(xié)程不能與某些編程語言或特定編程語言特征適當地結合使用。例如,用C++異常處理編寫的任務不應當在協(xié)程中執(zhí)行,因為異常處理不能識別協(xié)程。這樣的C++任務可以改為利用專用線程來執(zhí)行。但是,傳統(tǒng)的系統(tǒng)不能提供對由相關線程執(zhí)行的任務和在協(xié)程中執(zhí)行的任務的協(xié)同調度。因此,為了協(xié)同調度C++任務和第二任務,所述第二任務必須由相關線程執(zhí)行。
但是,有可能希望在協(xié)程中執(zhí)行第二任務,特別是在第二任務是用與協(xié)程兼容的語言編寫并且期望改進執(zhí)行時間的情況下。更一般地,需要用來有效調度由相關線程執(zhí)行的任務和在協(xié)程中執(zhí)行的任務的系統(tǒng)。

發(fā)明內容
本發(fā)明的一個方面提供了一種方法,該方法包括定義與協(xié)程執(zhí)行相關的第一組多個任務,以及與特定任務線程執(zhí)行相關的第二組多個任務;產生多個線程,所述多個線程中的每一個與所述第二組多個任務中的一個相關;運行控制線程,以便確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關;如果所述任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換該控制線程的協(xié)程上下文和該任務的協(xié)程上下文;以及如果所述任務被確定為與線程執(zhí)行相關,則運行所述控制線程以恢復與該任務相關的線程并掛起該控制線程。
本發(fā)明的另一個方面提供了一種存儲程序代碼的計算機可讀介質,所述程序代碼包括定義與協(xié)程執(zhí)行相關的第一組多個任務和與特定任務線程執(zhí)行相關的第二組多個任務的代碼;產生多個線程的代碼,所述多個線程中的每一個與所述第二組多個任務之一相關;運行控制線程的代碼,用以確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關;如果所述任務被確定為與協(xié)程執(zhí)行相關、則運行所述控制線程以交換該控制線程的協(xié)程上下文和該任務的協(xié)程上下文的代碼;以及如果所述任務被確定為與線程執(zhí)行相關、則運行控制線程以恢復與該任務相關的線程并掛起該控制線程的代碼。
本發(fā)明的再一個方面提供了一種系統(tǒng),該系統(tǒng)包括存儲數據的數據庫;以及與該數據庫通信的數據庫管理系統(tǒng),所述數據庫管理系統(tǒng)用于定義與協(xié)程執(zhí)行相關的第一組多個任務,以及與特定任務線程執(zhí)行相關的第二組多個任務;產生多個線程,所述多個線程中的每一個與所述第二組多個任務中的一個相關;運行控制線程,以確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關;如果所述任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換該控制線程的協(xié)程上下文和該任務的協(xié)程上下文;以及如果所述任務被確定為與線程執(zhí)行相關,則運行控制線程以恢復與該任務相關的線程并掛起該控制線程。


圖1是根據一些實施例的系統(tǒng)拓撲的方框圖。
圖2是根據一些實施例的執(zhí)行任務的程序代碼的流程圖。
圖3是根據一些實施例的架構的方框圖。
圖4是根據一些實施例的存儲器結構的圖。
圖5是根據一些實施例由控制線程執(zhí)行的程序代碼的流程圖。
圖6是根據一些實施例由特定任務(task-specific)線程執(zhí)行的程序代碼的流程圖。
圖7是根據一些實施例由控制線程作為協(xié)程執(zhí)行的程序代碼的流程圖。
具體實施例方式
圖1是根據一些實施例的系統(tǒng)100的方框圖。應當注意,其它系統(tǒng)拓撲可以與其它實施例結合使用。系統(tǒng)100示出了客戶端-服務器數據庫環(huán)境,其包括應用/數據庫服務器110、客戶端設備120至123和數據源130至132。
服務器110可以用來接收、存儲、管理和提供數據。這樣的數據可以從諸如數據源130至132的源接收,和/或由服務器110生成。響應于從客戶端設備120至123接收的請求,可以將數據提供給它們。
系統(tǒng)100的服務器110包括應用111、網絡服務器112、數據庫管理系統(tǒng)(DBMS)113、數據庫114和高速緩存拷貝(cache copy)。應用111可以提供商業(yè)監(jiān)視、存貨控制、在線購物和/或任何其它已知或將被人知曉的適當的功能。應用111可以包括用于與網絡服務器112和DBMS 113通信的程序代碼和用于利用數據庫114中存儲的數據的程序代碼。
網絡服務器112可以管理服務器110與客戶端設備120至123和數據源130至132中的一個或多個之間的數據通信。根據一些實施例,一個或多個設備或源執(zhí)行網絡瀏覽器和/或一個或多個Java程序來與網絡服務器112交互。
DBMS 113可以包括已知或將來已知的用來管理數據庫實例(instance)的任何系統(tǒng)。DBMS 113可以接收諸如結構化查詢語言(SQL)請求的請求,可以從數據庫114檢索被請求的數據,并且可以將被請求數據返回到請求者。DBMS 113還可以執(zhí)行管理、優(yōu)化、監(jiān)視和其它與數據庫相關的任務。
數據庫114可以包括一個或多個用于存儲數據的異構系統(tǒng),因此DBMS113可能包括一個或多個用于檢索數據的系統(tǒng)。根據一些實施例,數據庫114被實現為任何適當的數據集合(collection),計算機程序可以訪問該數據集合,以便從集合中選擇特定的數據。
數據庫114的數據可以包括數據記錄和相關索引條目(即應用數據),以及配置文件、數據庫參數、路徑、用戶信息和任何其它適當的信息。在一些實施例中,數據庫114是在線交易處理(OLTP)數據庫實例的元素。OLTP數據庫實例適合在由大量用戶和大型數據庫構成的環(huán)境中快速處理個人交易。
在數據庫執(zhí)行期間,數據庫的各種元素存儲在高速緩存中。這些元素可以包括最近訪問的應用數據的頁、數據庫目錄對象和/或日志隊列。高速緩存拷貝115包括所有或部分高速緩存的拷貝。高速緩存拷貝115可以包括liveCacheTM數據庫實例,其能夠便利對拷貝的高速緩存數據的面向對象操作。
在協(xié)程中執(zhí)行可能會為一些與OTLP數據庫實例相關的任務帶來好處,而與liveCacheTM數據庫實例相關的任務卻可能不適合在協(xié)程中執(zhí)行。例如,與liveCacheTM數據庫實例相關的任務可能是使用與協(xié)程不兼容的語言特征編寫的??紤]到前述情況,DBMS 113的一些實施例包括協(xié)同調度由相關線程執(zhí)行的任務和在協(xié)程中執(zhí)行的任務的程序代碼。這種調度的例子將會在下面具體闡述。
服務器110可以包括可在其操作期間使用的其它未示出的元素,諸如任何適當的程序代碼、腳本、或可執(zhí)行用來與系統(tǒng)100的其它元素連接的其它功能數據、其它應用、其它數據文件、操作系統(tǒng)文件以及設備驅動器。這些元素是本領域技術人員已知的,因此在這里不作具體描述。
客戶端設備120、121、122和123分別被示為便攜式計算機、電話、臺式計算機和個人數字助理。一般來說,客戶端設備120至123中的每一個可以包括用于與服務器110通信的硬件和/或軟件的任何組合。這種通信可以包括向服務器110發(fā)送對信息的請求,以及從數據庫114接收包括數據的響應。客戶端設備120至123可以包括任何適當的客戶端應用,諸如網絡瀏覽器或Java程序。在這方面,客戶端設備120至123可以通過因特網或通過內聯網連接到服務器110。
數據源130至132可以包括可以向服務器110提供數據的任何數據的任何源。數據可以被推送(push)到服務器100,和/或響應于從服務器100接收的查詢而被提供。一個或多個數據源130至132可以包括在商業(yè)或工業(yè)場境中采用的后端數據環(huán)境。因此數據源130至132可以包括許多異構的硬件和軟件系統(tǒng),它們中的一些相互之間沒有互操作。
系統(tǒng)100的兩個或多個元素可以位于互為遠程的位置,并且可以經由網絡120和/或專用連接來相互通信。并且,所顯示的系統(tǒng)100的每個元素都可以包括任何數目的硬件和/或軟件元素,它們中的一些也可以位于互為遠程的位置。
這里被描述為相互通信的元素直接或間接地能夠通過任何數目的系統(tǒng)通信以傳輸數據,包括但不限于局域網、廣域網、電話網絡、蜂窩網絡、光纖網絡、衛(wèi)星網絡、紅外網絡、射頻網絡、以及可以用于在設備之間傳輸信息的任何其它類型的網絡。此外,系統(tǒng)間的通信可以通過任何一個或多個當前已知或將來已知的傳輸協(xié)議來進行,諸如異步傳輸模式(ATM)、因特網協(xié)議(IP)、超文本傳送協(xié)議(HTTP)和無線應用協(xié)議(WAP)。因此,通信網絡120可以包括任何已知或將被人知曉的通信介質和協(xié)議。
圖2是根據一些實施例的進程200的流程圖。進程200的一些實施例可以提供對由相關線程執(zhí)行的任務和在協(xié)程中執(zhí)行的任務的協(xié)同調度。進程200和此處提到的所有其它進程可以被實施為從一個和多個計算機可讀介質讀取的處理器可執(zhí)行程序代碼,然后以壓縮、未編譯和/或加密的格式存儲,所述計算機可讀介質諸如軟盤、CD-ROM、DVD-ROM、ZipTM盤、磁帶和對進程編碼的信號。在一些實施例中,可以用硬連線的電路取代程序代碼,或者用硬連線的電路與程序代碼結合來實現根據一些實施例的進程。因此實施例不限于任何特定的硬件和軟件組合。
在一些實施例中,服務器110執(zhí)行DBMS 113的程序代碼以執(zhí)行每個進程200。因此,下面對進程200的描述將包括被服務器110執(zhí)行的每個進程200的例子。
最初,在步驟S201定義與協(xié)程執(zhí)行相關的第一組多個任務和與特定任務線程執(zhí)行相關的第二組多個任務??梢栽贒BMS 113和數據庫114的初始化期間動態(tài)地定義(即,配置)任務。更具體地說,DBMS 113的內核啟動數據庫114并創(chuàng)建協(xié)調器線程。協(xié)調器線程產生各種專門的線程和用戶內核線程(UKT),以執(zhí)行諸如連接到數據庫114、監(jiān)聽SQL查詢、處理SQL查詢、處理I/O和監(jiān)視數據庫114的任務。
圖3是根據一些實施例的服務器110的架構300的方框圖,示出了DBMS113的內核310。實施例不限于架構300,并且架構300可以以任何當前已知或將來已知的方式實現。例如,每個示出的軟件元素可以被實施為服務、層、和/或相關操作環(huán)境的核心組件,并且/或者可以由任何其它可執(zhí)行軟件環(huán)境實施,包括動態(tài)鏈接庫或單機應用。
架構300包括API層320,用于暴露(expose)到DBMS 113的接口,以用于與操作系統(tǒng)內核330通信。API層320可以提供用于管理線程執(zhí)行和上下文交換(context swap)的接口。例如,由API層320暴露的接口可以符合在電氣和電子工程師協(xié)會便攜式操作系統(tǒng)接口(POSIX)1003.1c標準中規(guī)定的線程編程接口,但實施例不限于此。
操作系統(tǒng)內核330可以包括由服務器110提供的任何適合的系統(tǒng)內核。操作系統(tǒng)內核330的非詳盡的例子包括基于UnixTM,LinuxTM和WindowsTM的內核。操作系統(tǒng)內核330提供對包括服務器110的硬件元素的硬件層340的控制。
返回到當前例子的步驟S201,用戶內核線程之一可以在存儲器中創(chuàng)建兩個和多個任務控制塊。任務控制塊包括與第一組多個任務和第二組多個任務相關的信息。因此,在步驟S201的一些實施例中通過創(chuàng)建與每個任務相關的任務控制塊來定義任務。
圖4是根據一些實施例的存儲器區(qū)域400的方框圖,在其中可以創(chuàng)建任務控制塊。存儲器區(qū)域400并非必須表示連續(xù)的存儲器足跡(footprint)。而是,每個所表示的存儲器結構可以跨越一個或多個存儲器位置和/或跨越不同類型的物理存儲器(例如,L1高速緩存、雙倍數據速率隨機存取存儲器、硬盤)而存在。
在一些實施例中,在S201創(chuàng)建的每一個任務控制塊410與一個任務相關。任務控制塊410包括指示相關任務與協(xié)程執(zhí)行相關還是與特定任務線程執(zhí)行相關的標志或其它指示符。根據所述任務與協(xié)程執(zhí)行相關還是與特定任務線程執(zhí)行相關,還包括指向與該任務相關的線程結構或協(xié)程上下文的指針。如果任務與特定任務線程執(zhí)行相關,則與該任務相關的任務控制塊還可以包括識別該特定任務線程以執(zhí)行該任務的線程Id。
存儲器400還包括進程足跡420,其包括線程結構421、422和423。線程結構421、422和423的每一個可以被用于存儲各個線程的指令指針和數據。每個線程可以訪問進程足跡420的代碼424、堆陣425和數據426。
線程結構421、422和423可以與之前提到的存儲在任務控制塊410中的指針相對應。例如,任務控制塊411可以與某個任務相關。任務控制塊411可以指示該任務與特定任務線程執(zhí)行相關,并可以包括指向線程結構421的指針。因此,線程結構421可以用來運行線程以執(zhí)行該特定任務。類似地,任務控制塊412可以與由對應于線程結構422的線程執(zhí)行的任務相關。
協(xié)程上下文430和440也位于存儲器400中,并且包括各自的指令指針和相關堆棧。協(xié)程上下文430和440也可以與各自的一個任務控制塊410的指針相對應。例如,任務控制塊413和414可以分別對應于與協(xié)程執(zhí)行相關的任務,并且包括指向協(xié)程上下文430和440的指針。結果,與任務控制塊413相關的任務可以在協(xié)程上下文430中執(zhí)行,而與任務控制塊414相關的任務可以在協(xié)程上下文440中執(zhí)行。
在步驟S201的一些實施例中還可以創(chuàng)建UKT結構450。如在圖4中示出的,UKT結構450可以包括指向當前運行任務的指針和指向任務控制塊410的指針。后一個指針可以包括指向任務控制塊411的指針,其包括指向任務任務控制塊412的指針,其包括指向任務控制塊413的指針,其包括指向任務控制塊414的指針。結果,根據UKT結構450的任務控制塊指針可以訪問每一個任務控制塊410。
UKT結構450還包括控制線程的協(xié)程上下文和控制線程句柄。根據一些實施例的控制線程的用途將在下面具體討論。
在根據一些實施例的UKT結構450中包括任務隊列。任務隊列中的每個任務可以通過指向其相關任務控制塊的指針識別。任務隊列可以包括可運行任務隊列、掛起任務隊列和等待任務隊列。這些隊列和其它隊列在用戶級任務調度領域是公知的。
返回到進程200,在步驟S202產生多個線程。線程可以由在步驟S201用來定義任務的用戶內核線程來產生(spawn),或者由另一個線程產生。每個所產生的線程與在步驟S201定義的第二組多個任務之一相關。更具體地說,每個所產生的線程被指定用來執(zhí)行第二組多個任務中相關的一個。
繼續(xù)當前的例子,在S202,可以從UKT結構450檢索指向任務控制塊410的指針。利用該指針,分析每個任務控制塊410,以識別其中定義的任何特定任務線程。如上所述,如果任務控制塊410與將由線程執(zhí)行的任務相關,則任務控制塊410會包括線程Id和/或指向線程數據結構的指針。在S202,每個產生的線程在產生之后被掛起。
接著,在步驟S203,運行控制線程以確定所述任務之一是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關。如上面所提到的,可以使用UKT結構450中的相關句柄和上下文來運行控制線程??刂凭€程可以包括用來執(zhí)行步驟S201和S202之一或兩者的用戶內核線程。
在步驟S203檢查的任務可以包括UKT結構450的可運行任務隊列的最高優(yōu)先級任務。因此,最初可以訪問UKT結構450以識別該任務。然后,訪問所識別的任務的任務控制塊410,以確定該任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關。如上所述,這種相關可以由標志等來指示。
如果所述任務與協(xié)程執(zhí)行相關,則在S204運行控制線程,以便將控制線程的協(xié)程上下文與所述一個任務的協(xié)程上下文交換。這樣的協(xié)程交換在該領域中是已知的,并且可以依靠API層320提供的接口。在一些實施例中,上下文交換需要指向所述一個任務的協(xié)程上下文(例如,協(xié)程上下文430或440)的指針。該指針可以從與所述一個任務相關的任務控制塊410確定。
如果所述任務被確定為與特定任務線程執(zhí)行相關,則在S205運行控制線程以恢復與該任務相關的線程并掛起控制線程。進程200在步驟S204或S205終止。
圖5到7是與一些實施例相對應的流程圖,總體上反映了進程200的實現。更具體地說,圖5包括可以由控制線程執(zhí)行以調度任務的步驟。圖6示出了由特定任務線程執(zhí)行以執(zhí)行調度的任務的步驟,而圖7示出了由控制線程執(zhí)行以便在協(xié)程中執(zhí)行調度的任務的步驟。
從進程500開始,在步驟S501控制線程產生特定任務線程??刂凭€程可以包括用戶內核線程,其還可用來執(zhí)行除圖5示出的那些步驟之外的步驟。例如,如關于進程200的步驟S201所描述的,控制線程還可以用來定義第一組多個任務和第二組多個任務。
為將由特定任務線程執(zhí)行的每個任務產生一個線程。這些線程可以以任何適當的方式被控制線程識別。例如,控制線程可以為每一個任務控制塊410產生一個線程,而每一個任務控制塊410都包括線程Id和指向線程數據結構的指針。
然后,利用任何已知或將來已知的用于掛起線程的技術掛起所產生的線程。線程以允許另一個線程來恢復被掛起的線程的方式被掛起。例如,一些實施例采用條件變量、互斥鎖(mutex)和判定(predicate)來掛起線程和允許任何運行的線程恢復任何掛起的線程。線程掛起和線程產生可以通過調用API層330提供的適當的接口來實現。
接下來,在步驟S502,控制線程為與協(xié)程執(zhí)行相關的任務創(chuàng)建協(xié)程上下文。根據一些實施例,可以為任務控制塊410中表示的、且與協(xié)程執(zhí)行相關的每個任務創(chuàng)建協(xié)程上下文。協(xié)程上下文430和440是可以在步驟S502創(chuàng)建的協(xié)程上下文的例子??刂凭€程可以通過調用API層330的創(chuàng)建接口來創(chuàng)建協(xié)程上下文。
在步驟S503,控制線程選擇執(zhí)行的任務。在一些實施例中,被選擇的任務是前述可運行任務隊列的最高優(yōu)先級任務。因此,在步驟S503控制線程可以訪問UKT控制結構430,以識別可運行任務隊列中的最高優(yōu)先級任務。
然后,在步驟S504,控制線程確定所選擇的任務是否與協(xié)程執(zhí)行相關。步驟S504的一些實施例可以包括從UKT結構450檢索指向任務控制塊410的指針,利用該指針訪問與所選擇的任務相關的任務控制塊410,并從該任務控制塊410檢索指示所選擇的任務是否與協(xié)程執(zhí)行相關的指示符。
如果該任務與協(xié)程執(zhí)行相關,則在S505控制線程將控制線程的協(xié)程上下文與所述一個任務的協(xié)程上下文交換??刂凭€程可以通過從UKT結構450檢索控制線程句柄并從相關任務控制塊410檢索指向所選擇的任務的協(xié)程上下文的指針、并且通過將檢索到的指針和控制線程句柄傳送給API層320提供的接口來執(zhí)行所述交換。
通過交換的作用,控制線程繼續(xù)運行并在新的協(xié)程中執(zhí)行所選擇的任務。進程600示出了根據一些實施例的用于在協(xié)程中執(zhí)行所選擇的任務的控制線程的執(zhí)行順序。
最初,在步驟601,控制線程執(zhí)行與任務相關的程序代碼。更具體地說,控制線程可以根據相關協(xié)程上下文的指令指針來執(zhí)行指令。在S601期間,當前任務必須通過定義在某點讓渡到(yield to)另一個任務。所述讓渡必須出于任何已知或將來已知的適當的原因來執(zhí)行。
在讓渡之前,在S602,控制線程確定后續(xù)任務是否與協(xié)程執(zhí)行相關。后續(xù)任務可以包括前述可運行任務隊列中的最高優(yōu)先級可運行任務。在一些實施例中,控制線程可以調用協(xié)程來保存當前任務指針、從UKT結構450識別后續(xù)任務并用指向后續(xù)任務的指針取代UKT結構450的當前任務指針。然后,控制線程可以從UKT結構450檢索指向任務控制塊410的指針,利用該指針訪問與后續(xù)進程相關的任務控制塊410,并從所訪問的任務控制塊410檢索指示后續(xù)任務是否與協(xié)程執(zhí)行相關的指示符。
如果在S602控制線程確定后續(xù)任務與協(xié)程執(zhí)行相關,則控制線程將當前任務的協(xié)程上下文與后續(xù)任務的協(xié)程上下文交換。如相對于步驟S505所描述的,控制線程可以通過從相關任務控制塊410檢索指向后續(xù)任務的協(xié)程上下文的指針、并通過將檢索到的指針和指向當前協(xié)程上下文的指針傳送給API層320提供的接口來執(zhí)行所述交換。然后,流程返回到S601,以執(zhí)行與后續(xù)任務相關的程序代碼,并且流程如上所述繼續(xù)。
如果確定該后續(xù)任務將被相關特定任務線程執(zhí)行,則流程從S602前進到S604。在S604,控制線程將當前任務的協(xié)程上下文與控制線程的協(xié)程上下文(即,進程500任務的協(xié)程上下文)交換。然后,流程返回到S504。
繼續(xù)當前的例子,在S504,控制線程確定所選擇的任務不是與協(xié)程相關。為此,之前提到的后續(xù)任務由于上述UKT結構450的當前任務指針的改變而變?yōu)樗x擇的任務。因此,流程從S504前進到S506。
在S506,控制線程恢復與所選擇的任務相關的線程。被恢復的線程是在S501產生的特定任務線程。控制線程可以利用當前或今后為人知曉的線程間信令機制來恢復該特定任務線程。所述機制包括但不限于互斥鎖、旗語、條件變量、判定和線程Id。與所選擇的任務相關的任務控制塊410之一可以包括控制線程所使用的信息,以恢復該相關線程。
在S506恢復所述特定任務線程之后,控制線程在S507將自己掛起。接著,在S508,控制線程等待由另一個線程恢復,該另一個線程可以與在S506恢復的線程是同一個,也可以不是同一個。在控制線程在S508等待的同時,被恢復的線程可以如圖7的進程700所示地執(zhí)行其相關任務。
在S701,特定任務線程的流程在該線程由控制線程產生后將自己掛起的點開始。接著,在S702,所述線程根據由關于S506所提到的控制線程或另一個特定任務線程執(zhí)行的讓渡和其它動作而恢復。
然后,在S703,該線程執(zhí)行與所述任務相關的程序代碼。例如,可以將線程結構421、422和423之一與代碼424、堆陣425和數據426結合使用以執(zhí)行當前任務的程序代碼。與該任務相關的任務控制塊410可以指示使用線程結構421、422和423中的哪一個來執(zhí)行該任務。
接著,在S704,在讓渡之前,該線程確定后續(xù)的任務是否與系統(tǒng)協(xié)程執(zhí)行相關。可以如上面關于控制線程和S603所描述的那樣來進行所述確定。如果后續(xù)的任務與協(xié)程執(zhí)行相關,則控制線程在S705恢復,并且當前線程在S706將自己掛起。然后,控制線程在S504如上所述地恢復。
如果在S704控制線程確定后續(xù)的任務不是與協(xié)程執(zhí)行相關,則該后續(xù)的任務一定與特定任務線程執(zhí)行相關。因此當前線程在S707恢復與該后續(xù)任務相關的線程,并在S706將自己掛起。更具體地說,當前線程可以訪問UKT結構450,以識別與所選擇的任務相關的任務控制塊410,并且可以檢索所需的線程Id、互斥鎖、條件變量等,以恢復與所述后續(xù)任務相關的線程。此外,與所述后續(xù)任務相關的線程可以前進,以如上所述在S702開始執(zhí)行進程700。
概括來說,進程500、600和700允許控制線程執(zhí)行與協(xié)程執(zhí)行相關的所有任務,并且允許其它任務被專用線程執(zhí)行。根據一些實施例,控制線程用于執(zhí)行步驟S503至S508,并且一個或多個其它線程用于執(zhí)行步驟S501和S502。
此處描述的實施例僅僅是出于示例的目的。本領域技術人員將會認識到,可以實施其它的具有僅由權利要求書限定的修改和替換的其它實施例。
權利要求
1.一種方法,包括定義與協(xié)程執(zhí)行相關的第一組多個任務,以及與特定任務線程執(zhí)行相關的第二組多個任務;產生多個線程,所述多個線程中的每一個與所述第二組多個任務中的一個相關;運行控制線程,以便確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關;如果所述任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換該控制線程的協(xié)程上下文和該任務的協(xié)程上下文;以及如果所述任務被確定為與線程執(zhí)行相關,則運行所述控制線程以恢復與該任務相關的線程并掛起該控制線程。
2.如權利要求1所述的方法,其中,所述任務是所述第一組多個任務和所述第二組多個任務中的最高優(yōu)先級可運行任務。
3.如權利要求1所述的方法,還包括運行所述控制線程,以執(zhí)行與所述任務相關的程序代碼。
4.如權利要求1所述的方法,還包括運行所述線程,以執(zhí)行與所述任務相關的程序代碼。
5.如權利要求1所述的方法,還包括運行與所述任務相關的線程,以執(zhí)行與所述任務相關的程序代碼;運行所述線程,以確定所述第一組多個任務和所述第二組多個任務中的第二任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關,如果所述第二任務被確定為與協(xié)程執(zhí)行相關,則運行所述線程以恢復控制線程并掛起所述線程;以及如果所述第二任務被確定為與線程執(zhí)行相關,則運行所述線程以恢復與該第二任務相關的第二線程并掛起所述線程。
6.如權利要求5所述的方法,還包括運行所述控制線程以執(zhí)行與所述第二任務相關的程序代碼。
7.如權利要求5所述的方法,還包括運行所述第二線程以執(zhí)行與所述第二任務相關的程序代碼。
8.如權利要求1所述的方法,還包括運行與所述控制線程,以執(zhí)行與所述任務相關的程序代碼;運行所述控制線程,以確定所述第一組多個任務和所述第二組多個任務中的第二任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關;如果所述第二任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換與所述任務相關的協(xié)程上下文和所述第二任務的協(xié)程上下文;以及如果所述第二任務被確定為與線程執(zhí)行相關,則運行所述控制線程以交換所述任務的協(xié)程上下文與所述控制線程的協(xié)程上下文。
9.如權利要求8所述的方法,還包括運行所述控制線程以執(zhí)行與所述第二任務相關的程序代碼。
10.如權利要求8所述的方法,還包括運行所述控制線程,以確定所述第一組多個任務和所述第二組多個任務中的第三任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關,如果所述第三任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換與所述控制線程的協(xié)程上下文和所述第三任務的協(xié)程上下文;以及如果所述第三任務被確定為與線程執(zhí)行相關,則運行所述控制線程以恢復與所述第三任務相關的線程并掛起所述控制線程。
11.一種存儲程序代碼的計算機可讀介質,所述程序代碼包括定義與協(xié)程執(zhí)行相關的第一組多個任務和與特定任務線程執(zhí)行相關的第二組多個任務的代碼;產生多個線程的代碼,所述多個線程中的每一個與所述第二組多個任務之一相關;運行控制線程的代碼,用以確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關;如果所述任務被確定為與協(xié)程執(zhí)行相關、則運行所述控制線程以交換該控制線程的協(xié)程上下文和該任務的協(xié)程上下文的代碼;以及如果所述任務被確定為與線程執(zhí)行相關、則運行控制線程以恢復與該任務相關的線程并掛起該控制線程的代碼。
12.如權利要求11所述的介質,其中,所述任務是所述第一組多個任務和所述第二組多個任務中的最高優(yōu)先級可運行任務。
13.如權利要求11所述的介質,所述程序代碼還包括運行所述控制線程以執(zhí)行與所述任務相關的程序代碼的代碼。
14.如權利要求11所述的介質,所述程序代碼還包括運行所述線程以執(zhí)行與所述任務相關的程序代碼的代碼。
15.如權利要求11所述的介質,所述程序代碼還包括運行與所述任務相關的線程以執(zhí)行與所述任務相關的程序代碼的代碼;運行所述線程以確定所述第一組多個任務和所述第二組多個任務中的第二任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關的代碼,如果所述第二任務被確定為與協(xié)程執(zhí)行相關則運行所述線程以恢復控制線程并掛起所述線程的代碼;以及如果所述第二任務被確定為與線程執(zhí)行相關則運行所述線程以恢復與該第二任務相關的第二線程并掛起所述線程的代碼。
16.如權利要求15所述的介質,所述程序代碼還包括運行所述控制線程以執(zhí)行與所述第二任務相關的程序代碼的代碼。
17.如權利要求15所述的介質,所述程序代碼還包括運行所述第二線程以執(zhí)行與所述第二任務相關的程序代碼的代碼。
18.如權利要求11所述的介質,所述程序代碼還包括運行所述控制線程以執(zhí)行與所述任務相關的程序代碼的代碼;運行所述控制線程以確定所述第一組多個任務和所述第二組多個任務中的第二任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關的代碼;如果所述第二任務被確定為與協(xié)程執(zhí)行相關、則運行所述控制線程以交換與所述任務相關的協(xié)程上下文和所述第二任務的協(xié)程上下文的代碼;以及如果所述第二任務被確定為與線程執(zhí)行相關、則運行所述控制線程以交換所述任務的系統(tǒng)協(xié)程上下文和所述控制線程的協(xié)程上下文的代碼。
19.如權利要求18所述的介質,所述程序代碼還包括運行所述控制線程以執(zhí)行與所述第二任務相關的程序代碼的代碼。
20.如權利要求18所述的介質,所述程序代碼還包括運行所述控制線程以確定所述第一組多個任務和所述第二組多個任務中的第三任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關的代碼,如果所述第三任務被確定為與協(xié)程執(zhí)行相關、則運行所述控制線程以交換與所述控制線程的協(xié)程上下文和所述第三任務的協(xié)程上下文的代碼;以及如果所述第三任務被確定為與線程執(zhí)行相關、則運行所述控制線程以恢復與所述第三任務相關的線程并掛起所述控制線程的代碼。
21.一種系統(tǒng),包括存儲數據的數據庫;以及與該數據庫通信的數據庫管理系統(tǒng),所述數據庫管理系統(tǒng)用于定義與協(xié)程執(zhí)行相關的第一組多個任務,以及與特定任務線程執(zhí)行相關的第二組多個任務;產生多個線程,所述多個線程中的每一個與所述第二組多個任務中的一個相關;運行控制線程,以確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關;如果所述任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換該控制線程的協(xié)程上下文和該任務的協(xié)程上下文;以及如果所述任務被確定為與線程執(zhí)行相關,則運行控制線程以恢復與該任務相關的線程并掛起該控制線程。
22.如權利要求21所述的系統(tǒng),還包括高速緩存拷貝,用于存儲所述數據的一部分的拷貝,其中,所存儲的拷貝與所述第二組多個任務相關,并且其中,所述數據與所述第一組多個任務相關。
23.如權利要求21所述的系統(tǒng),所述數據庫管理系統(tǒng)還用于運行與所述任務相關的線程,以執(zhí)行與所述任務相關的程序代碼;運行所述線程,以確定所述第一組多個任務和所述第二組多個任務中的第二任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關,如果所述第二任務被確定為與協(xié)程執(zhí)行相關,則運行所述線程以恢復控制線程并掛起所述線程;以及如果所述第二任務被確定為與線程執(zhí)行相關,則運行所述線程以恢復與該第二任務相關的第二線程并掛起所述線程。
24.如權利要求21所述的系統(tǒng),所述數據庫管理系統(tǒng)還用于運行所述控制線程,以執(zhí)行與所述任務相關的程序代碼;運行所述控制線程,以確定所述第一組多個任務和所述第二組多個任務中的第二任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關;如果所述第二任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換與所述任務相關的協(xié)程上下文和所述第二任務的協(xié)程上下文;以及如果所述第二任務被確定為與線程執(zhí)行相關,則運行所述控制線程以交換所述任務的系統(tǒng)協(xié)程上下文和所述控制線程的協(xié)程上下文。
25.如權利要求24所述的系統(tǒng),所述數據庫管理系統(tǒng)還包括運行所述控制線程,以執(zhí)行與所述第二任務相關的程序代碼;運行所述控制線程,以確定所述第一組多個任務和所述第二組多個任務中的第三任務是否與協(xié)程執(zhí)行或特定任務線程執(zhí)行相關,如果所述第三任務被確定為與協(xié)程執(zhí)行相關,則運行所述控制線程以交換所述控制線程的協(xié)程上下文和所述第三任務的協(xié)程上下文;以及如果所述第三任務被確定為與線程執(zhí)行相關,則運行所述控制線程以恢復與所述第三任務相關的線程并掛起所述控制線程。
全文摘要
一種數據庫系統(tǒng)可以提供與協(xié)程執(zhí)行相關的第一組多個任務以及與特定任務線程執(zhí)行相關的第二組多個任務的定義。并且可以提供控制線程和多個線程的產生,所述多個線程中的每一個與所述第二組多個任務中的一個相關,以及控制線程的運行,以便確定所述第一組多個任務和第二組多個任務中的任務是否與協(xié)程執(zhí)行或與特定任務線程執(zhí)行相關。如果所述任務被確定為與協(xié)程執(zhí)行相關,則可以運行所述控制線程以進行該控制線程的協(xié)程上下文與該任務的協(xié)程上下文的交換。如果所述任務被確定為與線程執(zhí)行相關,則可以運行控制線程以恢復與該任務相關的線程并掛起該控制線程。
文檔編號G06F17/30GK1967487SQ20061014944
公開日2007年5月23日 申請日期2006年11月20日 優(yōu)先權日2005年11月18日
發(fā)明者喬格·W·門辛 申請人:Sap股份公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1