專利名稱:使用協(xié)程和線程的協(xié)同調(diào)度的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的一些實(shí)施例涉及提供計(jì)算任務(wù)的分支執(zhí)行的系統(tǒng)。更具體地說,本發(fā)明的一些實(shí)施例與利用協(xié)程(coroutine)和線程來協(xié)同(cooperatively)執(zhí)行各種任務(wù)的進(jìn)程(process)相關(guān)。
背景技術(shù):
軟件應(yīng)用可以包括用來執(zhí)行兩個(gè)或多個(gè)任務(wù)的程序代碼。盡管這些任務(wù)可能表現(xiàn)出各種相互依賴性(interdependency),但每個(gè)任務(wù)通常可以被看作提供一個(gè)或多個(gè)專用功能。為了優(yōu)化應(yīng)用效率和/或資源利用率,可以由線程或者在協(xié)程中執(zhí)行任務(wù)。
線程與寄存器組和執(zhí)行堆棧相關(guān)。進(jìn)程是一個(gè)或多個(gè)線程的容器,所述一個(gè)或多個(gè)線程中的每一個(gè)共享進(jìn)程的狀態(tài)信息、存儲(chǔ)器地址空間和其它資源。操作系統(tǒng)可以通過在專用處理器時(shí)隙中運(yùn)行每個(gè)線程來調(diào)度多線程進(jìn)程的線程。并且,多線程進(jìn)程可以利用定時(shí)器、線程間信令和/或其它機(jī)制來控制線程調(diào)度。
協(xié)程與獨(dú)立的寄存器組和執(zhí)行堆棧相關(guān)。當(dāng)一個(gè)協(xié)程第一次被調(diào)用時(shí),執(zhí)行從它的執(zhí)行堆棧的起點(diǎn)開始。對(duì)于其后的對(duì)該協(xié)程的調(diào)用,執(zhí)行從該協(xié)程最后調(diào)用另一個(gè)協(xié)程的點(diǎn)恢復(fù)。因此,協(xié)程可以在其相關(guān)任務(wù)完成之前讓渡(yield),并且該任務(wù)可以通過后續(xù)對(duì)該協(xié)程的調(diào)用而恢復(fù)(resume)。協(xié)程切換(switch)消耗的處理器開銷一般比線程切換少,因此系統(tǒng)程序切換可以提供更快的任務(wù)分派(dispatch)。
協(xié)程不能與某些編程語(yǔ)言或特定編程語(yǔ)言特征適當(dāng)?shù)亟Y(jié)合使用。例如,用C++異常處理編寫的任務(wù)不應(yīng)當(dāng)在協(xié)程中執(zhí)行,因?yàn)楫惓L幚聿荒茏R(shí)別協(xié)程。這樣的C++任務(wù)可以改為利用專用線程來執(zhí)行。但是,傳統(tǒng)的系統(tǒng)不能提供對(duì)由相關(guān)線程執(zhí)行的任務(wù)和在協(xié)程中執(zhí)行的任務(wù)的協(xié)同調(diào)度。因此,為了協(xié)同調(diào)度C++任務(wù)和第二任務(wù),所述第二任務(wù)必須由相關(guān)線程執(zhí)行。
但是,有可能希望在協(xié)程中執(zhí)行第二任務(wù),特別是在第二任務(wù)是用與協(xié)程兼容的語(yǔ)言編寫并且期望改進(jìn)執(zhí)行時(shí)間的情況下。更一般地,需要用來有效調(diào)度由相關(guān)線程執(zhí)行的任務(wù)和在協(xié)程中執(zhí)行的任務(wù)的系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)方面提供了一種方法,該方法包括定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù),以及與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù);產(chǎn)生多個(gè)線程,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)中的一個(gè)相關(guān);運(yùn)行控制線程,以便確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān);如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換該控制線程的協(xié)程上下文和該任務(wù)的協(xié)程上下文;以及如果所述任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程。
本發(fā)明的另一個(gè)方面提供了一種存儲(chǔ)程序代碼的計(jì)算機(jī)可讀介質(zhì),所述程序代碼包括定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù)和與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù)的代碼;產(chǎn)生多個(gè)線程的代碼,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)之一相關(guān);運(yùn)行控制線程的代碼,用以確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān);如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān)、則運(yùn)行所述控制線程以交換該控制線程的協(xié)程上下文和該任務(wù)的協(xié)程上下文的代碼;以及如果所述任務(wù)被確定為與線程執(zhí)行相關(guān)、則運(yùn)行控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程的代碼。
本發(fā)明的再一個(gè)方面提供了一種系統(tǒng),該系統(tǒng)包括存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù);以及與該數(shù)據(jù)庫(kù)通信的數(shù)據(jù)庫(kù)管理系統(tǒng),所述數(shù)據(jù)庫(kù)管理系統(tǒng)用于定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù),以及與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù);產(chǎn)生多個(gè)線程,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)中的一個(gè)相關(guān);運(yùn)行控制線程,以確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān);如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換該控制線程的協(xié)程上下文和該任務(wù)的協(xié)程上下文;以及如果所述任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程。
圖1是根據(jù)一些實(shí)施例的系統(tǒng)拓?fù)涞姆娇驁D。
圖2是根據(jù)一些實(shí)施例的執(zhí)行任務(wù)的程序代碼的流程圖。
圖3是根據(jù)一些實(shí)施例的架構(gòu)的方框圖。
圖4是根據(jù)一些實(shí)施例的存儲(chǔ)器結(jié)構(gòu)的圖。
圖5是根據(jù)一些實(shí)施例由控制線程執(zhí)行的程序代碼的流程圖。
圖6是根據(jù)一些實(shí)施例由特定任務(wù)(task-specific)線程執(zhí)行的程序代碼的流程圖。
圖7是根據(jù)一些實(shí)施例由控制線程作為協(xié)程執(zhí)行的程序代碼的流程圖。
具體實(shí)施例方式
圖1是根據(jù)一些實(shí)施例的系統(tǒng)100的方框圖。應(yīng)當(dāng)注意,其它系統(tǒng)拓?fù)淇梢耘c其它實(shí)施例結(jié)合使用。系統(tǒng)100示出了客戶端-服務(wù)器數(shù)據(jù)庫(kù)環(huán)境,其包括應(yīng)用/數(shù)據(jù)庫(kù)服務(wù)器110、客戶端設(shè)備120至123和數(shù)據(jù)源130至132。
服務(wù)器110可以用來接收、存儲(chǔ)、管理和提供數(shù)據(jù)。這樣的數(shù)據(jù)可以從諸如數(shù)據(jù)源130至132的源接收,和/或由服務(wù)器110生成。響應(yīng)于從客戶端設(shè)備120至123接收的請(qǐng)求,可以將數(shù)據(jù)提供給它們。
系統(tǒng)100的服務(wù)器110包括應(yīng)用111、網(wǎng)絡(luò)服務(wù)器112、數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)113、數(shù)據(jù)庫(kù)114和高速緩存拷貝(cache copy)。應(yīng)用111可以提供商業(yè)監(jiān)視、存貨控制、在線購(gòu)物和/或任何其它已知或?qū)⒈蝗酥獣缘倪m當(dāng)?shù)墓δ?。?yīng)用111可以包括用于與網(wǎng)絡(luò)服務(wù)器112和DBMS 113通信的程序代碼和用于利用數(shù)據(jù)庫(kù)114中存儲(chǔ)的數(shù)據(jù)的程序代碼。
網(wǎng)絡(luò)服務(wù)器112可以管理服務(wù)器110與客戶端設(shè)備120至123和數(shù)據(jù)源130至132中的一個(gè)或多個(gè)之間的數(shù)據(jù)通信。根據(jù)一些實(shí)施例,一個(gè)或多個(gè)設(shè)備或源執(zhí)行網(wǎng)絡(luò)瀏覽器和/或一個(gè)或多個(gè)Java程序來與網(wǎng)絡(luò)服務(wù)器112交互。
DBMS 113可以包括已知或?qū)硪阎挠脕砉芾頂?shù)據(jù)庫(kù)實(shí)例(instance)的任何系統(tǒng)。DBMS 113可以接收諸如結(jié)構(gòu)化查詢語(yǔ)言(SQL)請(qǐng)求的請(qǐng)求,可以從數(shù)據(jù)庫(kù)114檢索被請(qǐng)求的數(shù)據(jù),并且可以將被請(qǐng)求數(shù)據(jù)返回到請(qǐng)求者。DBMS 113還可以執(zhí)行管理、優(yōu)化、監(jiān)視和其它與數(shù)據(jù)庫(kù)相關(guān)的任務(wù)。
數(shù)據(jù)庫(kù)114可以包括一個(gè)或多個(gè)用于存儲(chǔ)數(shù)據(jù)的異構(gòu)系統(tǒng),因此DBMS113可能包括一個(gè)或多個(gè)用于檢索數(shù)據(jù)的系統(tǒng)。根據(jù)一些實(shí)施例,數(shù)據(jù)庫(kù)114被實(shí)現(xiàn)為任何適當(dāng)?shù)臄?shù)據(jù)集合(collection),計(jì)算機(jī)程序可以訪問該數(shù)據(jù)集合,以便從集合中選擇特定的數(shù)據(jù)。
數(shù)據(jù)庫(kù)114的數(shù)據(jù)可以包括數(shù)據(jù)記錄和相關(guān)索引條目(即應(yīng)用數(shù)據(jù)),以及配置文件、數(shù)據(jù)庫(kù)參數(shù)、路徑、用戶信息和任何其它適當(dāng)?shù)男畔?。在一些?shí)施例中,數(shù)據(jù)庫(kù)114是在線交易處理(OLTP)數(shù)據(jù)庫(kù)實(shí)例的元素。OLTP數(shù)據(jù)庫(kù)實(shí)例適合在由大量用戶和大型數(shù)據(jù)庫(kù)構(gòu)成的環(huán)境中快速處理個(gè)人交易。
在數(shù)據(jù)庫(kù)執(zhí)行期間,數(shù)據(jù)庫(kù)的各種元素存儲(chǔ)在高速緩存中。這些元素可以包括最近訪問的應(yīng)用數(shù)據(jù)的頁(yè)、數(shù)據(jù)庫(kù)目錄對(duì)象和/或日志隊(duì)列。高速緩存拷貝115包括所有或部分高速緩存的拷貝。高速緩存拷貝115可以包括liveCacheTM數(shù)據(jù)庫(kù)實(shí)例,其能夠便利對(duì)拷貝的高速緩存數(shù)據(jù)的面向?qū)ο蟛僮鳌?br>
在協(xié)程中執(zhí)行可能會(huì)為一些與OTLP數(shù)據(jù)庫(kù)實(shí)例相關(guān)的任務(wù)帶來好處,而與liveCacheTM數(shù)據(jù)庫(kù)實(shí)例相關(guān)的任務(wù)卻可能不適合在協(xié)程中執(zhí)行。例如,與liveCacheTM數(shù)據(jù)庫(kù)實(shí)例相關(guān)的任務(wù)可能是使用與協(xié)程不兼容的語(yǔ)言特征編寫的??紤]到前述情況,DBMS 113的一些實(shí)施例包括協(xié)同調(diào)度由相關(guān)線程執(zhí)行的任務(wù)和在協(xié)程中執(zhí)行的任務(wù)的程序代碼。這種調(diào)度的例子將會(huì)在下面具體闡述。
服務(wù)器110可以包括可在其操作期間使用的其它未示出的元素,諸如任何適當(dāng)?shù)某绦虼a、腳本、或可執(zhí)行用來與系統(tǒng)100的其它元素連接的其它功能數(shù)據(jù)、其它應(yīng)用、其它數(shù)據(jù)文件、操作系統(tǒng)文件以及設(shè)備驅(qū)動(dòng)器。這些元素是本領(lǐng)域技術(shù)人員已知的,因此在這里不作具體描述。
客戶端設(shè)備120、121、122和123分別被示為便攜式計(jì)算機(jī)、電話、臺(tái)式計(jì)算機(jī)和個(gè)人數(shù)字助理。一般來說,客戶端設(shè)備120至123中的每一個(gè)可以包括用于與服務(wù)器110通信的硬件和/或軟件的任何組合。這種通信可以包括向服務(wù)器110發(fā)送對(duì)信息的請(qǐng)求,以及從數(shù)據(jù)庫(kù)114接收包括數(shù)據(jù)的響應(yīng)。客戶端設(shè)備120至123可以包括任何適當(dāng)?shù)目蛻舳藨?yīng)用,諸如網(wǎng)絡(luò)瀏覽器或Java程序。在這方面,客戶端設(shè)備120至123可以通過因特網(wǎng)或通過內(nèi)聯(lián)網(wǎng)連接到服務(wù)器110。
數(shù)據(jù)源130至132可以包括可以向服務(wù)器110提供數(shù)據(jù)的任何數(shù)據(jù)的任何源。數(shù)據(jù)可以被推送(push)到服務(wù)器100,和/或響應(yīng)于從服務(wù)器100接收的查詢而被提供。一個(gè)或多個(gè)數(shù)據(jù)源130至132可以包括在商業(yè)或工業(yè)場(chǎng)境中采用的后端數(shù)據(jù)環(huán)境。因此數(shù)據(jù)源130至132可以包括許多異構(gòu)的硬件和軟件系統(tǒng),它們中的一些相互之間沒有互操作。
系統(tǒng)100的兩個(gè)或多個(gè)元素可以位于互為遠(yuǎn)程的位置,并且可以經(jīng)由網(wǎng)絡(luò)120和/或?qū)S眠B接來相互通信。并且,所顯示的系統(tǒng)100的每個(gè)元素都可以包括任何數(shù)目的硬件和/或軟件元素,它們中的一些也可以位于互為遠(yuǎn)程的位置。
這里被描述為相互通信的元素直接或間接地能夠通過任何數(shù)目的系統(tǒng)通信以傳輸數(shù)據(jù),包括但不限于局域網(wǎng)、廣域網(wǎng)、電話網(wǎng)絡(luò)、蜂窩網(wǎng)絡(luò)、光纖網(wǎng)絡(luò)、衛(wèi)星網(wǎng)絡(luò)、紅外網(wǎng)絡(luò)、射頻網(wǎng)絡(luò)、以及可以用于在設(shè)備之間傳輸信息的任何其它類型的網(wǎng)絡(luò)。此外,系統(tǒng)間的通信可以通過任何一個(gè)或多個(gè)當(dāng)前已知或?qū)硪阎膫鬏攨f(xié)議來進(jìn)行,諸如異步傳輸模式(ATM)、因特網(wǎng)協(xié)議(IP)、超文本傳送協(xié)議(HTTP)和無線應(yīng)用協(xié)議(WAP)。因此,通信網(wǎng)絡(luò)120可以包括任何已知或?qū)⒈蝗酥獣缘耐ㄐ沤橘|(zhì)和協(xié)議。
圖2是根據(jù)一些實(shí)施例的進(jìn)程200的流程圖。進(jìn)程200的一些實(shí)施例可以提供對(duì)由相關(guān)線程執(zhí)行的任務(wù)和在協(xié)程中執(zhí)行的任務(wù)的協(xié)同調(diào)度。進(jìn)程200和此處提到的所有其它進(jìn)程可以被實(shí)施為從一個(gè)和多個(gè)計(jì)算機(jī)可讀介質(zhì)讀取的處理器可執(zhí)行程序代碼,然后以壓縮、未編譯和/或加密的格式存儲(chǔ),所述計(jì)算機(jī)可讀介質(zhì)諸如軟盤、CD-ROM、DVD-ROM、ZipTM盤、磁帶和對(duì)進(jìn)程編碼的信號(hào)。在一些實(shí)施例中,可以用硬連線的電路取代程序代碼,或者用硬連線的電路與程序代碼結(jié)合來實(shí)現(xiàn)根據(jù)一些實(shí)施例的進(jìn)程。因此實(shí)施例不限于任何特定的硬件和軟件組合。
在一些實(shí)施例中,服務(wù)器110執(zhí)行DBMS 113的程序代碼以執(zhí)行每個(gè)進(jìn)程200。因此,下面對(duì)進(jìn)程200的描述將包括被服務(wù)器110執(zhí)行的每個(gè)進(jìn)程200的例子。
最初,在步驟S201定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù)和與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù)??梢栽贒BMS 113和數(shù)據(jù)庫(kù)114的初始化期間動(dòng)態(tài)地定義(即,配置)任務(wù)。更具體地說,DBMS 113的內(nèi)核啟動(dòng)數(shù)據(jù)庫(kù)114并創(chuàng)建協(xié)調(diào)器線程。協(xié)調(diào)器線程產(chǎn)生各種專門的線程和用戶內(nèi)核線程(UKT),以執(zhí)行諸如連接到數(shù)據(jù)庫(kù)114、監(jiān)聽SQL查詢、處理SQL查詢、處理I/O和監(jiān)視數(shù)據(jù)庫(kù)114的任務(wù)。
圖3是根據(jù)一些實(shí)施例的服務(wù)器110的架構(gòu)300的方框圖,示出了DBMS113的內(nèi)核310。實(shí)施例不限于架構(gòu)300,并且架構(gòu)300可以以任何當(dāng)前已知或?qū)硪阎姆绞綄?shí)現(xiàn)。例如,每個(gè)示出的軟件元素可以被實(shí)施為服務(wù)、層、和/或相關(guān)操作環(huán)境的核心組件,并且/或者可以由任何其它可執(zhí)行軟件環(huán)境實(shí)施,包括動(dòng)態(tài)鏈接庫(kù)或單機(jī)應(yīng)用。
架構(gòu)300包括API層320,用于暴露(expose)到DBMS 113的接口,以用于與操作系統(tǒng)內(nèi)核330通信。API層320可以提供用于管理線程執(zhí)行和上下文交換(context swap)的接口。例如,由API層320暴露的接口可以符合在電氣和電子工程師協(xié)會(huì)便攜式操作系統(tǒng)接口(POSIX)1003.1c標(biāo)準(zhǔn)中規(guī)定的線程編程接口,但實(shí)施例不限于此。
操作系統(tǒng)內(nèi)核330可以包括由服務(wù)器110提供的任何適合的系統(tǒng)內(nèi)核。操作系統(tǒng)內(nèi)核330的非詳盡的例子包括基于UnixTM,LinuxTM和WindowsTM的內(nèi)核。操作系統(tǒng)內(nèi)核330提供對(duì)包括服務(wù)器110的硬件元素的硬件層340的控制。
返回到當(dāng)前例子的步驟S201,用戶內(nèi)核線程之一可以在存儲(chǔ)器中創(chuàng)建兩個(gè)和多個(gè)任務(wù)控制塊。任務(wù)控制塊包括與第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)相關(guān)的信息。因此,在步驟S201的一些實(shí)施例中通過創(chuàng)建與每個(gè)任務(wù)相關(guān)的任務(wù)控制塊來定義任務(wù)。
圖4是根據(jù)一些實(shí)施例的存儲(chǔ)器區(qū)域400的方框圖,在其中可以創(chuàng)建任務(wù)控制塊。存儲(chǔ)器區(qū)域400并非必須表示連續(xù)的存儲(chǔ)器足跡(footprint)。而是,每個(gè)所表示的存儲(chǔ)器結(jié)構(gòu)可以跨越一個(gè)或多個(gè)存儲(chǔ)器位置和/或跨越不同類型的物理存儲(chǔ)器(例如,L1高速緩存、雙倍數(shù)據(jù)速率隨機(jī)存取存儲(chǔ)器、硬盤)而存在。
在一些實(shí)施例中,在S201創(chuàng)建的每一個(gè)任務(wù)控制塊410與一個(gè)任務(wù)相關(guān)。任務(wù)控制塊410包括指示相關(guān)任務(wù)與協(xié)程執(zhí)行相關(guān)還是與特定任務(wù)線程執(zhí)行相關(guān)的標(biāo)志或其它指示符。根據(jù)所述任務(wù)與協(xié)程執(zhí)行相關(guān)還是與特定任務(wù)線程執(zhí)行相關(guān),還包括指向與該任務(wù)相關(guān)的線程結(jié)構(gòu)或協(xié)程上下文的指針。如果任務(wù)與特定任務(wù)線程執(zhí)行相關(guān),則與該任務(wù)相關(guān)的任務(wù)控制塊還可以包括識(shí)別該特定任務(wù)線程以執(zhí)行該任務(wù)的線程Id。
存儲(chǔ)器400還包括進(jìn)程足跡420,其包括線程結(jié)構(gòu)421、422和423。線程結(jié)構(gòu)421、422和423的每一個(gè)可以被用于存儲(chǔ)各個(gè)線程的指令指針和數(shù)據(jù)。每個(gè)線程可以訪問進(jìn)程足跡420的代碼424、堆陣425和數(shù)據(jù)426。
線程結(jié)構(gòu)421、422和423可以與之前提到的存儲(chǔ)在任務(wù)控制塊410中的指針相對(duì)應(yīng)。例如,任務(wù)控制塊411可以與某個(gè)任務(wù)相關(guān)。任務(wù)控制塊411可以指示該任務(wù)與特定任務(wù)線程執(zhí)行相關(guān),并可以包括指向線程結(jié)構(gòu)421的指針。因此,線程結(jié)構(gòu)421可以用來運(yùn)行線程以執(zhí)行該特定任務(wù)。類似地,任務(wù)控制塊412可以與由對(duì)應(yīng)于線程結(jié)構(gòu)422的線程執(zhí)行的任務(wù)相關(guān)。
協(xié)程上下文430和440也位于存儲(chǔ)器400中,并且包括各自的指令指針和相關(guān)堆棧。協(xié)程上下文430和440也可以與各自的一個(gè)任務(wù)控制塊410的指針相對(duì)應(yīng)。例如,任務(wù)控制塊413和414可以分別對(duì)應(yīng)于與協(xié)程執(zhí)行相關(guān)的任務(wù),并且包括指向協(xié)程上下文430和440的指針。結(jié)果,與任務(wù)控制塊413相關(guān)的任務(wù)可以在協(xié)程上下文430中執(zhí)行,而與任務(wù)控制塊414相關(guān)的任務(wù)可以在協(xié)程上下文440中執(zhí)行。
在步驟S201的一些實(shí)施例中還可以創(chuàng)建UKT結(jié)構(gòu)450。如在圖4中示出的,UKT結(jié)構(gòu)450可以包括指向當(dāng)前運(yùn)行任務(wù)的指針和指向任務(wù)控制塊410的指針。后一個(gè)指針可以包括指向任務(wù)控制塊411的指針,其包括指向任務(wù)任務(wù)控制塊412的指針,其包括指向任務(wù)控制塊413的指針,其包括指向任務(wù)控制塊414的指針。結(jié)果,根據(jù)UKT結(jié)構(gòu)450的任務(wù)控制塊指針可以訪問每一個(gè)任務(wù)控制塊410。
UKT結(jié)構(gòu)450還包括控制線程的協(xié)程上下文和控制線程句柄。根據(jù)一些實(shí)施例的控制線程的用途將在下面具體討論。
在根據(jù)一些實(shí)施例的UKT結(jié)構(gòu)450中包括任務(wù)隊(duì)列。任務(wù)隊(duì)列中的每個(gè)任務(wù)可以通過指向其相關(guān)任務(wù)控制塊的指針識(shí)別。任務(wù)隊(duì)列可以包括可運(yùn)行任務(wù)隊(duì)列、掛起任務(wù)隊(duì)列和等待任務(wù)隊(duì)列。這些隊(duì)列和其它隊(duì)列在用戶級(jí)任務(wù)調(diào)度領(lǐng)域是公知的。
返回到進(jìn)程200,在步驟S202產(chǎn)生多個(gè)線程。線程可以由在步驟S201用來定義任務(wù)的用戶內(nèi)核線程來產(chǎn)生(spawn),或者由另一個(gè)線程產(chǎn)生。每個(gè)所產(chǎn)生的線程與在步驟S201定義的第二組多個(gè)任務(wù)之一相關(guān)。更具體地說,每個(gè)所產(chǎn)生的線程被指定用來執(zhí)行第二組多個(gè)任務(wù)中相關(guān)的一個(gè)。
繼續(xù)當(dāng)前的例子,在S202,可以從UKT結(jié)構(gòu)450檢索指向任務(wù)控制塊410的指針。利用該指針,分析每個(gè)任務(wù)控制塊410,以識(shí)別其中定義的任何特定任務(wù)線程。如上所述,如果任務(wù)控制塊410與將由線程執(zhí)行的任務(wù)相關(guān),則任務(wù)控制塊410會(huì)包括線程Id和/或指向線程數(shù)據(jù)結(jié)構(gòu)的指針。在S202,每個(gè)產(chǎn)生的線程在產(chǎn)生之后被掛起。
接著,在步驟S203,運(yùn)行控制線程以確定所述任務(wù)之一是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān)。如上面所提到的,可以使用UKT結(jié)構(gòu)450中的相關(guān)句柄和上下文來運(yùn)行控制線程??刂凭€程可以包括用來執(zhí)行步驟S201和S202之一或兩者的用戶內(nèi)核線程。
在步驟S203檢查的任務(wù)可以包括UKT結(jié)構(gòu)450的可運(yùn)行任務(wù)隊(duì)列的最高優(yōu)先級(jí)任務(wù)。因此,最初可以訪問UKT結(jié)構(gòu)450以識(shí)別該任務(wù)。然后,訪問所識(shí)別的任務(wù)的任務(wù)控制塊410,以確定該任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān)。如上所述,這種相關(guān)可以由標(biāo)志等來指示。
如果所述任務(wù)與協(xié)程執(zhí)行相關(guān),則在S204運(yùn)行控制線程,以便將控制線程的協(xié)程上下文與所述一個(gè)任務(wù)的協(xié)程上下文交換。這樣的協(xié)程交換在該領(lǐng)域中是已知的,并且可以依靠API層320提供的接口。在一些實(shí)施例中,上下文交換需要指向所述一個(gè)任務(wù)的協(xié)程上下文(例如,協(xié)程上下文430或440)的指針。該指針可以從與所述一個(gè)任務(wù)相關(guān)的任務(wù)控制塊410確定。
如果所述任務(wù)被確定為與特定任務(wù)線程執(zhí)行相關(guān),則在S205運(yùn)行控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起控制線程。進(jìn)程200在步驟S204或S205終止。
圖5到7是與一些實(shí)施例相對(duì)應(yīng)的流程圖,總體上反映了進(jìn)程200的實(shí)現(xiàn)。更具體地說,圖5包括可以由控制線程執(zhí)行以調(diào)度任務(wù)的步驟。圖6示出了由特定任務(wù)線程執(zhí)行以執(zhí)行調(diào)度的任務(wù)的步驟,而圖7示出了由控制線程執(zhí)行以便在協(xié)程中執(zhí)行調(diào)度的任務(wù)的步驟。
從進(jìn)程500開始,在步驟S501控制線程產(chǎn)生特定任務(wù)線程。控制線程可以包括用戶內(nèi)核線程,其還可用來執(zhí)行除圖5示出的那些步驟之外的步驟。例如,如關(guān)于進(jìn)程200的步驟S201所描述的,控制線程還可以用來定義第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)。
為將由特定任務(wù)線程執(zhí)行的每個(gè)任務(wù)產(chǎn)生一個(gè)線程。這些線程可以以任何適當(dāng)?shù)姆绞奖豢刂凭€程識(shí)別。例如,控制線程可以為每一個(gè)任務(wù)控制塊410產(chǎn)生一個(gè)線程,而每一個(gè)任務(wù)控制塊410都包括線程Id和指向線程數(shù)據(jù)結(jié)構(gòu)的指針。
然后,利用任何已知或?qū)硪阎挠糜趻炱鹁€程的技術(shù)掛起所產(chǎn)生的線程。線程以允許另一個(gè)線程來恢復(fù)被掛起的線程的方式被掛起。例如,一些實(shí)施例采用條件變量、互斥鎖(mutex)和判定(predicate)來掛起線程和允許任何運(yùn)行的線程恢復(fù)任何掛起的線程。線程掛起和線程產(chǎn)生可以通過調(diào)用API層330提供的適當(dāng)?shù)慕涌趤韺?shí)現(xiàn)。
接下來,在步驟S502,控制線程為與協(xié)程執(zhí)行相關(guān)的任務(wù)創(chuàng)建協(xié)程上下文。根據(jù)一些實(shí)施例,可以為任務(wù)控制塊410中表示的、且與協(xié)程執(zhí)行相關(guān)的每個(gè)任務(wù)創(chuàng)建協(xié)程上下文。協(xié)程上下文430和440是可以在步驟S502創(chuàng)建的協(xié)程上下文的例子??刂凭€程可以通過調(diào)用API層330的創(chuàng)建接口來創(chuàng)建協(xié)程上下文。
在步驟S503,控制線程選擇執(zhí)行的任務(wù)。在一些實(shí)施例中,被選擇的任務(wù)是前述可運(yùn)行任務(wù)隊(duì)列的最高優(yōu)先級(jí)任務(wù)。因此,在步驟S503控制線程可以訪問UKT控制結(jié)構(gòu)430,以識(shí)別可運(yùn)行任務(wù)隊(duì)列中的最高優(yōu)先級(jí)任務(wù)。
然后,在步驟S504,控制線程確定所選擇的任務(wù)是否與協(xié)程執(zhí)行相關(guān)。步驟S504的一些實(shí)施例可以包括從UKT結(jié)構(gòu)450檢索指向任務(wù)控制塊410的指針,利用該指針訪問與所選擇的任務(wù)相關(guān)的任務(wù)控制塊410,并從該任務(wù)控制塊410檢索指示所選擇的任務(wù)是否與協(xié)程執(zhí)行相關(guān)的指示符。
如果該任務(wù)與協(xié)程執(zhí)行相關(guān),則在S505控制線程將控制線程的協(xié)程上下文與所述一個(gè)任務(wù)的協(xié)程上下文交換??刂凭€程可以通過從UKT結(jié)構(gòu)450檢索控制線程句柄并從相關(guān)任務(wù)控制塊410檢索指向所選擇的任務(wù)的協(xié)程上下文的指針、并且通過將檢索到的指針和控制線程句柄傳送給API層320提供的接口來執(zhí)行所述交換。
通過交換的作用,控制線程繼續(xù)運(yùn)行并在新的協(xié)程中執(zhí)行所選擇的任務(wù)。進(jìn)程600示出了根據(jù)一些實(shí)施例的用于在協(xié)程中執(zhí)行所選擇的任務(wù)的控制線程的執(zhí)行順序。
最初,在步驟601,控制線程執(zhí)行與任務(wù)相關(guān)的程序代碼。更具體地說,控制線程可以根據(jù)相關(guān)協(xié)程上下文的指令指針來執(zhí)行指令。在S601期間,當(dāng)前任務(wù)必須通過定義在某點(diǎn)讓渡到(yield to)另一個(gè)任務(wù)。所述讓渡必須出于任何已知或?qū)硪阎倪m當(dāng)?shù)脑騺韴?zhí)行。
在讓渡之前,在S602,控制線程確定后續(xù)任務(wù)是否與協(xié)程執(zhí)行相關(guān)。后續(xù)任務(wù)可以包括前述可運(yùn)行任務(wù)隊(duì)列中的最高優(yōu)先級(jí)可運(yùn)行任務(wù)。在一些實(shí)施例中,控制線程可以調(diào)用協(xié)程來保存當(dāng)前任務(wù)指針、從UKT結(jié)構(gòu)450識(shí)別后續(xù)任務(wù)并用指向后續(xù)任務(wù)的指針取代UKT結(jié)構(gòu)450的當(dāng)前任務(wù)指針。然后,控制線程可以從UKT結(jié)構(gòu)450檢索指向任務(wù)控制塊410的指針,利用該指針訪問與后續(xù)進(jìn)程相關(guān)的任務(wù)控制塊410,并從所訪問的任務(wù)控制塊410檢索指示后續(xù)任務(wù)是否與協(xié)程執(zhí)行相關(guān)的指示符。
如果在S602控制線程確定后續(xù)任務(wù)與協(xié)程執(zhí)行相關(guān),則控制線程將當(dāng)前任務(wù)的協(xié)程上下文與后續(xù)任務(wù)的協(xié)程上下文交換。如相對(duì)于步驟S505所描述的,控制線程可以通過從相關(guān)任務(wù)控制塊410檢索指向后續(xù)任務(wù)的協(xié)程上下文的指針、并通過將檢索到的指針和指向當(dāng)前協(xié)程上下文的指針傳送給API層320提供的接口來執(zhí)行所述交換。然后,流程返回到S601,以執(zhí)行與后續(xù)任務(wù)相關(guān)的程序代碼,并且流程如上所述繼續(xù)。
如果確定該后續(xù)任務(wù)將被相關(guān)特定任務(wù)線程執(zhí)行,則流程從S602前進(jìn)到S604。在S604,控制線程將當(dāng)前任務(wù)的協(xié)程上下文與控制線程的協(xié)程上下文(即,進(jìn)程500任務(wù)的協(xié)程上下文)交換。然后,流程返回到S504。
繼續(xù)當(dāng)前的例子,在S504,控制線程確定所選擇的任務(wù)不是與協(xié)程相關(guān)。為此,之前提到的后續(xù)任務(wù)由于上述UKT結(jié)構(gòu)450的當(dāng)前任務(wù)指針的改變而變?yōu)樗x擇的任務(wù)。因此,流程從S504前進(jìn)到S506。
在S506,控制線程恢復(fù)與所選擇的任務(wù)相關(guān)的線程。被恢復(fù)的線程是在S501產(chǎn)生的特定任務(wù)線程。控制線程可以利用當(dāng)前或今后為人知曉的線程間信令機(jī)制來恢復(fù)該特定任務(wù)線程。所述機(jī)制包括但不限于互斥鎖、旗語(yǔ)、條件變量、判定和線程Id。與所選擇的任務(wù)相關(guān)的任務(wù)控制塊410之一可以包括控制線程所使用的信息,以恢復(fù)該相關(guān)線程。
在S506恢復(fù)所述特定任務(wù)線程之后,控制線程在S507將自己掛起。接著,在S508,控制線程等待由另一個(gè)線程恢復(fù),該另一個(gè)線程可以與在S506恢復(fù)的線程是同一個(gè),也可以不是同一個(gè)。在控制線程在S508等待的同時(shí),被恢復(fù)的線程可以如圖7的進(jìn)程700所示地執(zhí)行其相關(guān)任務(wù)。
在S701,特定任務(wù)線程的流程在該線程由控制線程產(chǎn)生后將自己掛起的點(diǎn)開始。接著,在S702,所述線程根據(jù)由關(guān)于S506所提到的控制線程或另一個(gè)特定任務(wù)線程執(zhí)行的讓渡和其它動(dòng)作而恢復(fù)。
然后,在S703,該線程執(zhí)行與所述任務(wù)相關(guān)的程序代碼。例如,可以將線程結(jié)構(gòu)421、422和423之一與代碼424、堆陣425和數(shù)據(jù)426結(jié)合使用以執(zhí)行當(dāng)前任務(wù)的程序代碼。與該任務(wù)相關(guān)的任務(wù)控制塊410可以指示使用線程結(jié)構(gòu)421、422和423中的哪一個(gè)來執(zhí)行該任務(wù)。
接著,在S704,在讓渡之前,該線程確定后續(xù)的任務(wù)是否與系統(tǒng)協(xié)程執(zhí)行相關(guān)??梢匀缟厦骊P(guān)于控制線程和S603所描述的那樣來進(jìn)行所述確定。如果后續(xù)的任務(wù)與協(xié)程執(zhí)行相關(guān),則控制線程在S705恢復(fù),并且當(dāng)前線程在S706將自己掛起。然后,控制線程在S504如上所述地恢復(fù)。
如果在S704控制線程確定后續(xù)的任務(wù)不是與協(xié)程執(zhí)行相關(guān),則該后續(xù)的任務(wù)一定與特定任務(wù)線程執(zhí)行相關(guān)。因此當(dāng)前線程在S707恢復(fù)與該后續(xù)任務(wù)相關(guān)的線程,并在S706將自己掛起。更具體地說,當(dāng)前線程可以訪問UKT結(jié)構(gòu)450,以識(shí)別與所選擇的任務(wù)相關(guān)的任務(wù)控制塊410,并且可以檢索所需的線程Id、互斥鎖、條件變量等,以恢復(fù)與所述后續(xù)任務(wù)相關(guān)的線程。此外,與所述后續(xù)任務(wù)相關(guān)的線程可以前進(jìn),以如上所述在S702開始執(zhí)行進(jìn)程700。
概括來說,進(jìn)程500、600和700允許控制線程執(zhí)行與協(xié)程執(zhí)行相關(guān)的所有任務(wù),并且允許其它任務(wù)被專用線程執(zhí)行。根據(jù)一些實(shí)施例,控制線程用于執(zhí)行步驟S503至S508,并且一個(gè)或多個(gè)其它線程用于執(zhí)行步驟S501和S502。
此處描述的實(shí)施例僅僅是出于示例的目的。本領(lǐng)域技術(shù)人員將會(huì)認(rèn)識(shí)到,可以實(shí)施其它的具有僅由權(quán)利要求書限定的修改和替換的其它實(shí)施例。
權(quán)利要求
1.一種方法,包括定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù),以及與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù);產(chǎn)生多個(gè)線程,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)中的一個(gè)相關(guān);運(yùn)行控制線程,以便確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān);如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換該控制線程的協(xié)程上下文和該任務(wù)的協(xié)程上下文;以及如果所述任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程。
2.如權(quán)利要求1所述的方法,其中,所述任務(wù)是所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的最高優(yōu)先級(jí)可運(yùn)行任務(wù)。
3.如權(quán)利要求1所述的方法,還包括運(yùn)行所述控制線程,以執(zhí)行與所述任務(wù)相關(guān)的程序代碼。
4.如權(quán)利要求1所述的方法,還包括運(yùn)行所述線程,以執(zhí)行與所述任務(wù)相關(guān)的程序代碼。
5.如權(quán)利要求1所述的方法,還包括運(yùn)行與所述任務(wù)相關(guān)的線程,以執(zhí)行與所述任務(wù)相關(guān)的程序代碼;運(yùn)行所述線程,以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第二任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān),如果所述第二任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述線程以恢復(fù)控制線程并掛起所述線程;以及如果所述第二任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述線程以恢復(fù)與該第二任務(wù)相關(guān)的第二線程并掛起所述線程。
6.如權(quán)利要求5所述的方法,還包括運(yùn)行所述控制線程以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼。
7.如權(quán)利要求5所述的方法,還包括運(yùn)行所述第二線程以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼。
8.如權(quán)利要求1所述的方法,還包括運(yùn)行與所述控制線程,以執(zhí)行與所述任務(wù)相關(guān)的程序代碼;運(yùn)行所述控制線程,以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第二任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān);如果所述第二任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換與所述任務(wù)相關(guān)的協(xié)程上下文和所述第二任務(wù)的協(xié)程上下文;以及如果所述第二任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換所述任務(wù)的協(xié)程上下文與所述控制線程的協(xié)程上下文。
9.如權(quán)利要求8所述的方法,還包括運(yùn)行所述控制線程以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼。
10.如權(quán)利要求8所述的方法,還包括運(yùn)行所述控制線程,以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第三任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān),如果所述第三任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換與所述控制線程的協(xié)程上下文和所述第三任務(wù)的協(xié)程上下文;以及如果所述第三任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述控制線程以恢復(fù)與所述第三任務(wù)相關(guān)的線程并掛起所述控制線程。
11.一種存儲(chǔ)程序代碼的計(jì)算機(jī)可讀介質(zhì),所述程序代碼包括定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù)和與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù)的代碼;產(chǎn)生多個(gè)線程的代碼,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)之一相關(guān);運(yùn)行控制線程的代碼,用以確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān);如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān)、則運(yùn)行所述控制線程以交換該控制線程的協(xié)程上下文和該任務(wù)的協(xié)程上下文的代碼;以及如果所述任務(wù)被確定為與線程執(zhí)行相關(guān)、則運(yùn)行控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程的代碼。
12.如權(quán)利要求11所述的介質(zhì),其中,所述任務(wù)是所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的最高優(yōu)先級(jí)可運(yùn)行任務(wù)。
13.如權(quán)利要求11所述的介質(zhì),所述程序代碼還包括運(yùn)行所述控制線程以執(zhí)行與所述任務(wù)相關(guān)的程序代碼的代碼。
14.如權(quán)利要求11所述的介質(zhì),所述程序代碼還包括運(yùn)行所述線程以執(zhí)行與所述任務(wù)相關(guān)的程序代碼的代碼。
15.如權(quán)利要求11所述的介質(zhì),所述程序代碼還包括運(yùn)行與所述任務(wù)相關(guān)的線程以執(zhí)行與所述任務(wù)相關(guān)的程序代碼的代碼;運(yùn)行所述線程以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第二任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān)的代碼,如果所述第二任務(wù)被確定為與協(xié)程執(zhí)行相關(guān)則運(yùn)行所述線程以恢復(fù)控制線程并掛起所述線程的代碼;以及如果所述第二任務(wù)被確定為與線程執(zhí)行相關(guān)則運(yùn)行所述線程以恢復(fù)與該第二任務(wù)相關(guān)的第二線程并掛起所述線程的代碼。
16.如權(quán)利要求15所述的介質(zhì),所述程序代碼還包括運(yùn)行所述控制線程以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼的代碼。
17.如權(quán)利要求15所述的介質(zhì),所述程序代碼還包括運(yùn)行所述第二線程以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼的代碼。
18.如權(quán)利要求11所述的介質(zhì),所述程序代碼還包括運(yùn)行所述控制線程以執(zhí)行與所述任務(wù)相關(guān)的程序代碼的代碼;運(yùn)行所述控制線程以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第二任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān)的代碼;如果所述第二任務(wù)被確定為與協(xié)程執(zhí)行相關(guān)、則運(yùn)行所述控制線程以交換與所述任務(wù)相關(guān)的協(xié)程上下文和所述第二任務(wù)的協(xié)程上下文的代碼;以及如果所述第二任務(wù)被確定為與線程執(zhí)行相關(guān)、則運(yùn)行所述控制線程以交換所述任務(wù)的系統(tǒng)協(xié)程上下文和所述控制線程的協(xié)程上下文的代碼。
19.如權(quán)利要求18所述的介質(zhì),所述程序代碼還包括運(yùn)行所述控制線程以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼的代碼。
20.如權(quán)利要求18所述的介質(zhì),所述程序代碼還包括運(yùn)行所述控制線程以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第三任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān)的代碼,如果所述第三任務(wù)被確定為與協(xié)程執(zhí)行相關(guān)、則運(yùn)行所述控制線程以交換與所述控制線程的協(xié)程上下文和所述第三任務(wù)的協(xié)程上下文的代碼;以及如果所述第三任務(wù)被確定為與線程執(zhí)行相關(guān)、則運(yùn)行所述控制線程以恢復(fù)與所述第三任務(wù)相關(guān)的線程并掛起所述控制線程的代碼。
21.一種系統(tǒng),包括存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù);以及與該數(shù)據(jù)庫(kù)通信的數(shù)據(jù)庫(kù)管理系統(tǒng),所述數(shù)據(jù)庫(kù)管理系統(tǒng)用于定義與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù),以及與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù);產(chǎn)生多個(gè)線程,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)中的一個(gè)相關(guān);運(yùn)行控制線程,以確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān);如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換該控制線程的協(xié)程上下文和該任務(wù)的協(xié)程上下文;以及如果所述任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程。
22.如權(quán)利要求21所述的系統(tǒng),還包括高速緩存拷貝,用于存儲(chǔ)所述數(shù)據(jù)的一部分的拷貝,其中,所存儲(chǔ)的拷貝與所述第二組多個(gè)任務(wù)相關(guān),并且其中,所述數(shù)據(jù)與所述第一組多個(gè)任務(wù)相關(guān)。
23.如權(quán)利要求21所述的系統(tǒng),所述數(shù)據(jù)庫(kù)管理系統(tǒng)還用于運(yùn)行與所述任務(wù)相關(guān)的線程,以執(zhí)行與所述任務(wù)相關(guān)的程序代碼;運(yùn)行所述線程,以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第二任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān),如果所述第二任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述線程以恢復(fù)控制線程并掛起所述線程;以及如果所述第二任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述線程以恢復(fù)與該第二任務(wù)相關(guān)的第二線程并掛起所述線程。
24.如權(quán)利要求21所述的系統(tǒng),所述數(shù)據(jù)庫(kù)管理系統(tǒng)還用于運(yùn)行所述控制線程,以執(zhí)行與所述任務(wù)相關(guān)的程序代碼;運(yùn)行所述控制線程,以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第二任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān);如果所述第二任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換與所述任務(wù)相關(guān)的協(xié)程上下文和所述第二任務(wù)的協(xié)程上下文;以及如果所述第二任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換所述任務(wù)的系統(tǒng)協(xié)程上下文和所述控制線程的協(xié)程上下文。
25.如權(quán)利要求24所述的系統(tǒng),所述數(shù)據(jù)庫(kù)管理系統(tǒng)還包括運(yùn)行所述控制線程,以執(zhí)行與所述第二任務(wù)相關(guān)的程序代碼;運(yùn)行所述控制線程,以確定所述第一組多個(gè)任務(wù)和所述第二組多個(gè)任務(wù)中的第三任務(wù)是否與協(xié)程執(zhí)行或特定任務(wù)線程執(zhí)行相關(guān),如果所述第三任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則運(yùn)行所述控制線程以交換所述控制線程的協(xié)程上下文和所述第三任務(wù)的協(xié)程上下文;以及如果所述第三任務(wù)被確定為與線程執(zhí)行相關(guān),則運(yùn)行所述控制線程以恢復(fù)與所述第三任務(wù)相關(guān)的線程并掛起所述控制線程。
全文摘要
一種數(shù)據(jù)庫(kù)系統(tǒng)可以提供與協(xié)程執(zhí)行相關(guān)的第一組多個(gè)任務(wù)以及與特定任務(wù)線程執(zhí)行相關(guān)的第二組多個(gè)任務(wù)的定義。并且可以提供控制線程和多個(gè)線程的產(chǎn)生,所述多個(gè)線程中的每一個(gè)與所述第二組多個(gè)任務(wù)中的一個(gè)相關(guān),以及控制線程的運(yùn)行,以便確定所述第一組多個(gè)任務(wù)和第二組多個(gè)任務(wù)中的任務(wù)是否與協(xié)程執(zhí)行或與特定任務(wù)線程執(zhí)行相關(guān)。如果所述任務(wù)被確定為與協(xié)程執(zhí)行相關(guān),則可以運(yùn)行所述控制線程以進(jìn)行該控制線程的協(xié)程上下文與該任務(wù)的協(xié)程上下文的交換。如果所述任務(wù)被確定為與線程執(zhí)行相關(guān),則可以運(yùn)行控制線程以恢復(fù)與該任務(wù)相關(guān)的線程并掛起該控制線程。
文檔編號(hào)G06F17/30GK1967487SQ20061014944
公開日2007年5月23日 申請(qǐng)日期2006年11月20日 優(yōu)先權(quán)日2005年11月18日
發(fā)明者喬格·W·門辛 申請(qǐng)人:Sap股份公司