使用协程和线程的协同调度的制作方法

文档序号:6563088阅读:110来源:国知局
专利名称:使用协程和线程的协同调度的制作方法
技术领域
本发明的一些实施例涉及提供计算任务的分支执行的系统。更具体地说,本发明的一些实施例与利用协程(coroutine)和线程来协同(cooperatively)执行各种任务的进程(process)相关。
背景技术
软件应用可以包括用来执行两个或多个任务的程序代码。尽管这些任务可能表现出各种相互依赖性(interdependency),但每个任务通常可以被看作提供一个或多个专用功能。为了优化应用效率和/或资源利用率,可以由线程或者在协程中执行任务。
线程与寄存器组和执行堆栈相关。进程是一个或多个线程的容器,所述一个或多个线程中的每一个共享进程的状态信息、存储器地址空间和其它资源。操作系统可以通过在专用处理器时隙中运行每个线程来调度多线程进程的线程。并且,多线程进程可以利用定时器、线程间信令和/或其它机制来控制线程调度。
协程与独立的寄存器组和执行堆栈相关。当一个协程第一次被调用时,执行从它的执行堆栈的起点开始。对于其后的对该协程的调用,执行从该协程最后调用另一个协程的点恢复。因此,协程可以在其相关任务完成之前让渡(yield),并且该任务可以通过后续对该协程的调用而恢复(resume)。协程切换(switch)消耗的处理器开销一般比线程切换少,因此系统程序切换可以提供更快的任务分派(dispatch)。
协程不能与某些编程语言或特定编程语言特征适当地结合使用。例如,用C++异常处理编写的任务不应当在协程中执行,因为异常处理不能识别协程。这样的C++任务可以改为利用专用线程来执行。但是,传统的系统不能提供对由相关线程执行的任务和在协程中执行的任务的协同调度。因此,为了协同调度C++任务和第二任务,所述第二任务必须由相关线程执行。
但是,有可能希望在协程中执行第二任务,特别是在第二任务是用与协程兼容的语言编写并且期望改进执行时间的情况下。更一般地,需要用来有效调度由相关线程执行的任务和在协程中执行的任务的系统。

发明内容
本发明的一个方面提供了一种方法,该方法包括定义与协程执行相关的第一组多个任务,以及与特定任务线程执行相关的第二组多个任务;产生多个线程,所述多个线程中的每一个与所述第二组多个任务中的一个相关;运行控制线程,以便确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或特定任务线程执行相关;如果所述任务被确定为与协程执行相关,则运行所述控制线程以交换该控制线程的协程上下文和该任务的协程上下文;以及如果所述任务被确定为与线程执行相关,则运行所述控制线程以恢复与该任务相关的线程并挂起该控制线程。
本发明的另一个方面提供了一种存储程序代码的计算机可读介质,所述程序代码包括定义与协程执行相关的第一组多个任务和与特定任务线程执行相关的第二组多个任务的代码;产生多个线程的代码,所述多个线程中的每一个与所述第二组多个任务之一相关;运行控制线程的代码,用以确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或与特定任务线程执行相关;如果所述任务被确定为与协程执行相关、则运行所述控制线程以交换该控制线程的协程上下文和该任务的协程上下文的代码;以及如果所述任务被确定为与线程执行相关、则运行控制线程以恢复与该任务相关的线程并挂起该控制线程的代码。
本发明的再一个方面提供了一种系统,该系统包括存储数据的数据库;以及与该数据库通信的数据库管理系统,所述数据库管理系统用于定义与协程执行相关的第一组多个任务,以及与特定任务线程执行相关的第二组多个任务;产生多个线程,所述多个线程中的每一个与所述第二组多个任务中的一个相关;运行控制线程,以确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或与特定任务线程执行相关;如果所述任务被确定为与协程执行相关,则运行所述控制线程以交换该控制线程的协程上下文和该任务的协程上下文;以及如果所述任务被确定为与线程执行相关,则运行控制线程以恢复与该任务相关的线程并挂起该控制线程。


图1是根据一些实施例的系统拓扑的方框图。
图2是根据一些实施例的执行任务的程序代码的流程图。
图3是根据一些实施例的架构的方框图。
图4是根据一些实施例的存储器结构的图。
图5是根据一些实施例由控制线程执行的程序代码的流程图。
图6是根据一些实施例由特定任务(task-specific)线程执行的程序代码的流程图。
图7是根据一些实施例由控制线程作为协程执行的程序代码的流程图。
具体实施例方式
图1是根据一些实施例的系统100的方框图。应当注意,其它系统拓扑可以与其它实施例结合使用。系统100示出了客户端-服务器数据库环境,其包括应用/数据库服务器110、客户端设备120至123和数据源130至132。
服务器110可以用来接收、存储、管理和提供数据。这样的数据可以从诸如数据源130至132的源接收,和/或由服务器110生成。响应于从客户端设备120至123接收的请求,可以将数据提供给它们。
系统100的服务器110包括应用111、网络服务器112、数据库管理系统(DBMS)113、数据库114和高速缓存拷贝(cache copy)。应用111可以提供商业监视、存货控制、在线购物和/或任何其它已知或将被人知晓的适当的功能。应用111可以包括用于与网络服务器112和DBMS 113通信的程序代码和用于利用数据库114中存储的数据的程序代码。
网络服务器112可以管理服务器110与客户端设备120至123和数据源130至132中的一个或多个之间的数据通信。根据一些实施例,一个或多个设备或源执行网络浏览器和/或一个或多个Java程序来与网络服务器112交互。
DBMS 113可以包括已知或将来已知的用来管理数据库实例(instance)的任何系统。DBMS 113可以接收诸如结构化查询语言(SQL)请求的请求,可以从数据库114检索被请求的数据,并且可以将被请求数据返回到请求者。DBMS 113还可以执行管理、优化、监视和其它与数据库相关的任务。
数据库114可以包括一个或多个用于存储数据的异构系统,因此DBMS113可能包括一个或多个用于检索数据的系统。根据一些实施例,数据库114被实现为任何适当的数据集合(collection),计算机程序可以访问该数据集合,以便从集合中选择特定的数据。
数据库114的数据可以包括数据记录和相关索引条目(即应用数据),以及配置文件、数据库参数、路径、用户信息和任何其它适当的信息。在一些实施例中,数据库114是在线交易处理(OLTP)数据库实例的元素。OLTP数据库实例适合在由大量用户和大型数据库构成的环境中快速处理个人交易。
在数据库执行期间,数据库的各种元素存储在高速缓存中。这些元素可以包括最近访问的应用数据的页、数据库目录对象和/或日志队列。高速缓存拷贝115包括所有或部分高速缓存的拷贝。高速缓存拷贝115可以包括liveCacheTM数据库实例,其能够便利对拷贝的高速缓存数据的面向对象操作。
在协程中执行可能会为一些与OTLP数据库实例相关的任务带来好处,而与liveCacheTM数据库实例相关的任务却可能不适合在协程中执行。例如,与liveCacheTM数据库实例相关的任务可能是使用与协程不兼容的语言特征编写的。考虑到前述情况,DBMS 113的一些实施例包括协同调度由相关线程执行的任务和在协程中执行的任务的程序代码。这种调度的例子将会在下面具体阐述。
服务器110可以包括可在其操作期间使用的其它未示出的元素,诸如任何适当的程序代码、脚本、或可执行用来与系统100的其它元素连接的其它功能数据、其它应用、其它数据文件、操作系统文件以及设备驱动器。这些元素是本领域技术人员已知的,因此在这里不作具体描述。
客户端设备120、121、122和123分别被示为便携式计算机、电话、台式计算机和个人数字助理。一般来说,客户端设备120至123中的每一个可以包括用于与服务器110通信的硬件和/或软件的任何组合。这种通信可以包括向服务器110发送对信息的请求,以及从数据库114接收包括数据的响应。客户端设备120至123可以包括任何适当的客户端应用,诸如网络浏览器或Java程序。在这方面,客户端设备120至123可以通过因特网或通过内联网连接到服务器110。
数据源130至132可以包括可以向服务器110提供数据的任何数据的任何源。数据可以被推送(push)到服务器100,和/或响应于从服务器100接收的查询而被提供。一个或多个数据源130至132可以包括在商业或工业场境中采用的后端数据环境。因此数据源130至132可以包括许多异构的硬件和软件系统,它们中的一些相互之间没有互操作。
系统100的两个或多个元素可以位于互为远程的位置,并且可以经由网络120和/或专用连接来相互通信。并且,所显示的系统100的每个元素都可以包括任何数目的硬件和/或软件元素,它们中的一些也可以位于互为远程的位置。
这里被描述为相互通信的元素直接或间接地能够通过任何数目的系统通信以传输数据,包括但不限于局域网、广域网、电话网络、蜂窝网络、光纤网络、卫星网络、红外网络、射频网络、以及可以用于在设备之间传输信息的任何其它类型的网络。此外,系统间的通信可以通过任何一个或多个当前已知或将来已知的传输协议来进行,诸如异步传输模式(ATM)、因特网协议(IP)、超文本传送协议(HTTP)和无线应用协议(WAP)。因此,通信网络120可以包括任何已知或将被人知晓的通信介质和协议。
图2是根据一些实施例的进程200的流程图。进程200的一些实施例可以提供对由相关线程执行的任务和在协程中执行的任务的协同调度。进程200和此处提到的所有其它进程可以被实施为从一个和多个计算机可读介质读取的处理器可执行程序代码,然后以压缩、未编译和/或加密的格式存储,所述计算机可读介质诸如软盘、CD-ROM、DVD-ROM、ZipTM盘、磁带和对进程编码的信号。在一些实施例中,可以用硬连线的电路取代程序代码,或者用硬连线的电路与程序代码结合来实现根据一些实施例的进程。因此实施例不限于任何特定的硬件和软件组合。
在一些实施例中,服务器110执行DBMS 113的程序代码以执行每个进程200。因此,下面对进程200的描述将包括被服务器110执行的每个进程200的例子。
最初,在步骤S201定义与协程执行相关的第一组多个任务和与特定任务线程执行相关的第二组多个任务。可以在DBMS 113和数据库114的初始化期间动态地定义(即,配置)任务。更具体地说,DBMS 113的内核启动数据库114并创建协调器线程。协调器线程产生各种专门的线程和用户内核线程(UKT),以执行诸如连接到数据库114、监听SQL查询、处理SQL查询、处理I/O和监视数据库114的任务。
图3是根据一些实施例的服务器110的架构300的方框图,示出了DBMS113的内核310。实施例不限于架构300,并且架构300可以以任何当前已知或将来已知的方式实现。例如,每个示出的软件元素可以被实施为服务、层、和/或相关操作环境的核心组件,并且/或者可以由任何其它可执行软件环境实施,包括动态链接库或单机应用。
架构300包括API层320,用于暴露(expose)到DBMS 113的接口,以用于与操作系统内核330通信。API层320可以提供用于管理线程执行和上下文交换(context swap)的接口。例如,由API层320暴露的接口可以符合在电气和电子工程师协会便携式操作系统接口(POSIX)1003.1c标准中规定的线程编程接口,但实施例不限于此。
操作系统内核330可以包括由服务器110提供的任何适合的系统内核。操作系统内核330的非详尽的例子包括基于UnixTM,LinuxTM和WindowsTM的内核。操作系统内核330提供对包括服务器110的硬件元素的硬件层340的控制。
返回到当前例子的步骤S201,用户内核线程之一可以在存储器中创建两个和多个任务控制块。任务控制块包括与第一组多个任务和第二组多个任务相关的信息。因此,在步骤S201的一些实施例中通过创建与每个任务相关的任务控制块来定义任务。
图4是根据一些实施例的存储器区域400的方框图,在其中可以创建任务控制块。存储器区域400并非必须表示连续的存储器足迹(footprint)。而是,每个所表示的存储器结构可以跨越一个或多个存储器位置和/或跨越不同类型的物理存储器(例如,L1高速缓存、双倍数据速率随机存取存储器、硬盘)而存在。
在一些实施例中,在S201创建的每一个任务控制块410与一个任务相关。任务控制块410包括指示相关任务与协程执行相关还是与特定任务线程执行相关的标志或其它指示符。根据所述任务与协程执行相关还是与特定任务线程执行相关,还包括指向与该任务相关的线程结构或协程上下文的指针。如果任务与特定任务线程执行相关,则与该任务相关的任务控制块还可以包括识别该特定任务线程以执行该任务的线程Id。
存储器400还包括进程足迹420,其包括线程结构421、422和423。线程结构421、422和423的每一个可以被用于存储各个线程的指令指针和数据。每个线程可以访问进程足迹420的代码424、堆阵425和数据426。
线程结构421、422和423可以与之前提到的存储在任务控制块410中的指针相对应。例如,任务控制块411可以与某个任务相关。任务控制块411可以指示该任务与特定任务线程执行相关,并可以包括指向线程结构421的指针。因此,线程结构421可以用来运行线程以执行该特定任务。类似地,任务控制块412可以与由对应于线程结构422的线程执行的任务相关。
协程上下文430和440也位于存储器400中,并且包括各自的指令指针和相关堆栈。协程上下文430和440也可以与各自的一个任务控制块410的指针相对应。例如,任务控制块413和414可以分别对应于与协程执行相关的任务,并且包括指向协程上下文430和440的指针。结果,与任务控制块413相关的任务可以在协程上下文430中执行,而与任务控制块414相关的任务可以在协程上下文440中执行。
在步骤S201的一些实施例中还可以创建UKT结构450。如在图4中示出的,UKT结构450可以包括指向当前运行任务的指针和指向任务控制块410的指针。后一个指针可以包括指向任务控制块411的指针,其包括指向任务任务控制块412的指针,其包括指向任务控制块413的指针,其包括指向任务控制块414的指针。结果,根据UKT结构450的任务控制块指针可以访问每一个任务控制块410。
UKT结构450还包括控制线程的协程上下文和控制线程句柄。根据一些实施例的控制线程的用途将在下面具体讨论。
在根据一些实施例的UKT结构450中包括任务队列。任务队列中的每个任务可以通过指向其相关任务控制块的指针识别。任务队列可以包括可运行任务队列、挂起任务队列和等待任务队列。这些队列和其它队列在用户级任务调度领域是公知的。
返回到进程200,在步骤S202产生多个线程。线程可以由在步骤S201用来定义任务的用户内核线程来产生(spawn),或者由另一个线程产生。每个所产生的线程与在步骤S201定义的第二组多个任务之一相关。更具体地说,每个所产生的线程被指定用来执行第二组多个任务中相关的一个。
继续当前的例子,在S202,可以从UKT结构450检索指向任务控制块410的指针。利用该指针,分析每个任务控制块410,以识别其中定义的任何特定任务线程。如上所述,如果任务控制块410与将由线程执行的任务相关,则任务控制块410会包括线程Id和/或指向线程数据结构的指针。在S202,每个产生的线程在产生之后被挂起。
接着,在步骤S203,运行控制线程以确定所述任务之一是否与协程执行或特定任务线程执行相关。如上面所提到的,可以使用UKT结构450中的相关句柄和上下文来运行控制线程。控制线程可以包括用来执行步骤S201和S202之一或两者的用户内核线程。
在步骤S203检查的任务可以包括UKT结构450的可运行任务队列的最高优先级任务。因此,最初可以访问UKT结构450以识别该任务。然后,访问所识别的任务的任务控制块410,以确定该任务是否与协程执行或特定任务线程执行相关。如上所述,这种相关可以由标志等来指示。
如果所述任务与协程执行相关,则在S204运行控制线程,以便将控制线程的协程上下文与所述一个任务的协程上下文交换。这样的协程交换在该领域中是已知的,并且可以依靠API层320提供的接口。在一些实施例中,上下文交换需要指向所述一个任务的协程上下文(例如,协程上下文430或440)的指针。该指针可以从与所述一个任务相关的任务控制块410确定。
如果所述任务被确定为与特定任务线程执行相关,则在S205运行控制线程以恢复与该任务相关的线程并挂起控制线程。进程200在步骤S204或S205终止。
图5到7是与一些实施例相对应的流程图,总体上反映了进程200的实现。更具体地说,图5包括可以由控制线程执行以调度任务的步骤。图6示出了由特定任务线程执行以执行调度的任务的步骤,而图7示出了由控制线程执行以便在协程中执行调度的任务的步骤。
从进程500开始,在步骤S501控制线程产生特定任务线程。控制线程可以包括用户内核线程,其还可用来执行除图5示出的那些步骤之外的步骤。例如,如关于进程200的步骤S201所描述的,控制线程还可以用来定义第一组多个任务和第二组多个任务。
为将由特定任务线程执行的每个任务产生一个线程。这些线程可以以任何适当的方式被控制线程识别。例如,控制线程可以为每一个任务控制块410产生一个线程,而每一个任务控制块410都包括线程Id和指向线程数据结构的指针。
然后,利用任何已知或将来已知的用于挂起线程的技术挂起所产生的线程。线程以允许另一个线程来恢复被挂起的线程的方式被挂起。例如,一些实施例采用条件变量、互斥锁(mutex)和判定(predicate)来挂起线程和允许任何运行的线程恢复任何挂起的线程。线程挂起和线程产生可以通过调用API层330提供的适当的接口来实现。
接下来,在步骤S502,控制线程为与协程执行相关的任务创建协程上下文。根据一些实施例,可以为任务控制块410中表示的、且与协程执行相关的每个任务创建协程上下文。协程上下文430和440是可以在步骤S502创建的协程上下文的例子。控制线程可以通过调用API层330的创建接口来创建协程上下文。
在步骤S503,控制线程选择执行的任务。在一些实施例中,被选择的任务是前述可运行任务队列的最高优先级任务。因此,在步骤S503控制线程可以访问UKT控制结构430,以识别可运行任务队列中的最高优先级任务。
然后,在步骤S504,控制线程确定所选择的任务是否与协程执行相关。步骤S504的一些实施例可以包括从UKT结构450检索指向任务控制块410的指针,利用该指针访问与所选择的任务相关的任务控制块410,并从该任务控制块410检索指示所选择的任务是否与协程执行相关的指示符。
如果该任务与协程执行相关,则在S505控制线程将控制线程的协程上下文与所述一个任务的协程上下文交换。控制线程可以通过从UKT结构450检索控制线程句柄并从相关任务控制块410检索指向所选择的任务的协程上下文的指针、并且通过将检索到的指针和控制线程句柄传送给API层320提供的接口来执行所述交换。
通过交换的作用,控制线程继续运行并在新的协程中执行所选择的任务。进程600示出了根据一些实施例的用于在协程中执行所选择的任务的控制线程的执行顺序。
最初,在步骤601,控制线程执行与任务相关的程序代码。更具体地说,控制线程可以根据相关协程上下文的指令指针来执行指令。在S601期间,当前任务必须通过定义在某点让渡到(yield to)另一个任务。所述让渡必须出于任何已知或将来已知的适当的原因来执行。
在让渡之前,在S602,控制线程确定后续任务是否与协程执行相关。后续任务可以包括前述可运行任务队列中的最高优先级可运行任务。在一些实施例中,控制线程可以调用协程来保存当前任务指针、从UKT结构450识别后续任务并用指向后续任务的指针取代UKT结构450的当前任务指针。然后,控制线程可以从UKT结构450检索指向任务控制块410的指针,利用该指针访问与后续进程相关的任务控制块410,并从所访问的任务控制块410检索指示后续任务是否与协程执行相关的指示符。
如果在S602控制线程确定后续任务与协程执行相关,则控制线程将当前任务的协程上下文与后续任务的协程上下文交换。如相对于步骤S505所描述的,控制线程可以通过从相关任务控制块410检索指向后续任务的协程上下文的指针、并通过将检索到的指针和指向当前协程上下文的指针传送给API层320提供的接口来执行所述交换。然后,流程返回到S601,以执行与后续任务相关的程序代码,并且流程如上所述继续。
如果确定该后续任务将被相关特定任务线程执行,则流程从S602前进到S604。在S604,控制线程将当前任务的协程上下文与控制线程的协程上下文(即,进程500任务的协程上下文)交换。然后,流程返回到S504。
继续当前的例子,在S504,控制线程确定所选择的任务不是与协程相关。为此,之前提到的后续任务由于上述UKT结构450的当前任务指针的改变而变为所选择的任务。因此,流程从S504前进到S506。
在S506,控制线程恢复与所选择的任务相关的线程。被恢复的线程是在S501产生的特定任务线程。控制线程可以利用当前或今后为人知晓的线程间信令机制来恢复该特定任务线程。所述机制包括但不限于互斥锁、旗语、条件变量、判定和线程Id。与所选择的任务相关的任务控制块410之一可以包括控制线程所使用的信息,以恢复该相关线程。
在S506恢复所述特定任务线程之后,控制线程在S507将自己挂起。接着,在S508,控制线程等待由另一个线程恢复,该另一个线程可以与在S506恢复的线程是同一个,也可以不是同一个。在控制线程在S508等待的同时,被恢复的线程可以如图7的进程700所示地执行其相关任务。
在S701,特定任务线程的流程在该线程由控制线程产生后将自己挂起的点开始。接着,在S702,所述线程根据由关于S506所提到的控制线程或另一个特定任务线程执行的让渡和其它动作而恢复。
然后,在S703,该线程执行与所述任务相关的程序代码。例如,可以将线程结构421、422和423之一与代码424、堆阵425和数据426结合使用以执行当前任务的程序代码。与该任务相关的任务控制块410可以指示使用线程结构421、422和423中的哪一个来执行该任务。
接着,在S704,在让渡之前,该线程确定后续的任务是否与系统协程执行相关。可以如上面关于控制线程和S603所描述的那样来进行所述确定。如果后续的任务与协程执行相关,则控制线程在S705恢复,并且当前线程在S706将自己挂起。然后,控制线程在S504如上所述地恢复。
如果在S704控制线程确定后续的任务不是与协程执行相关,则该后续的任务一定与特定任务线程执行相关。因此当前线程在S707恢复与该后续任务相关的线程,并在S706将自己挂起。更具体地说,当前线程可以访问UKT结构450,以识别与所选择的任务相关的任务控制块410,并且可以检索所需的线程Id、互斥锁、条件变量等,以恢复与所述后续任务相关的线程。此外,与所述后续任务相关的线程可以前进,以如上所述在S702开始执行进程700。
概括来说,进程500、600和700允许控制线程执行与协程执行相关的所有任务,并且允许其它任务被专用线程执行。根据一些实施例,控制线程用于执行步骤S503至S508,并且一个或多个其它线程用于执行步骤S501和S502。
此处描述的实施例仅仅是出于示例的目的。本领域技术人员将会认识到,可以实施其它的具有仅由权利要求书限定的修改和替换的其它实施例。
权利要求
1.一种方法,包括定义与协程执行相关的第一组多个任务,以及与特定任务线程执行相关的第二组多个任务;产生多个线程,所述多个线程中的每一个与所述第二组多个任务中的一个相关;运行控制线程,以便确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或特定任务线程执行相关;如果所述任务被确定为与协程执行相关,则运行所述控制线程以交换该控制线程的协程上下文和该任务的协程上下文;以及如果所述任务被确定为与线程执行相关,则运行所述控制线程以恢复与该任务相关的线程并挂起该控制线程。
2.如权利要求1所述的方法,其中,所述任务是所述第一组多个任务和所述第二组多个任务中的最高优先级可运行任务。
3.如权利要求1所述的方法,还包括运行所述控制线程,以执行与所述任务相关的程序代码。
4.如权利要求1所述的方法,还包括运行所述线程,以执行与所述任务相关的程序代码。
5.如权利要求1所述的方法,还包括运行与所述任务相关的线程,以执行与所述任务相关的程序代码;运行所述线程,以确定所述第一组多个任务和所述第二组多个任务中的第二任务是否与协程执行或特定任务线程执行相关,如果所述第二任务被确定为与协程执行相关,则运行所述线程以恢复控制线程并挂起所述线程;以及如果所述第二任务被确定为与线程执行相关,则运行所述线程以恢复与该第二任务相关的第二线程并挂起所述线程。
6.如权利要求5所述的方法,还包括运行所述控制线程以执行与所述第二任务相关的程序代码。
7.如权利要求5所述的方法,还包括运行所述第二线程以执行与所述第二任务相关的程序代码。
8.如权利要求1所述的方法,还包括运行与所述控制线程,以执行与所述任务相关的程序代码;运行所述控制线程,以确定所述第一组多个任务和所述第二组多个任务中的第二任务是否与协程执行或特定任务线程执行相关;如果所述第二任务被确定为与协程执行相关,则运行所述控制线程以交换与所述任务相关的协程上下文和所述第二任务的协程上下文;以及如果所述第二任务被确定为与线程执行相关,则运行所述控制线程以交换所述任务的协程上下文与所述控制线程的协程上下文。
9.如权利要求8所述的方法,还包括运行所述控制线程以执行与所述第二任务相关的程序代码。
10.如权利要求8所述的方法,还包括运行所述控制线程,以确定所述第一组多个任务和所述第二组多个任务中的第三任务是否与协程执行或特定任务线程执行相关,如果所述第三任务被确定为与协程执行相关,则运行所述控制线程以交换与所述控制线程的协程上下文和所述第三任务的协程上下文;以及如果所述第三任务被确定为与线程执行相关,则运行所述控制线程以恢复与所述第三任务相关的线程并挂起所述控制线程。
11.一种存储程序代码的计算机可读介质,所述程序代码包括定义与协程执行相关的第一组多个任务和与特定任务线程执行相关的第二组多个任务的代码;产生多个线程的代码,所述多个线程中的每一个与所述第二组多个任务之一相关;运行控制线程的代码,用以确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或与特定任务线程执行相关;如果所述任务被确定为与协程执行相关、则运行所述控制线程以交换该控制线程的协程上下文和该任务的协程上下文的代码;以及如果所述任务被确定为与线程执行相关、则运行控制线程以恢复与该任务相关的线程并挂起该控制线程的代码。
12.如权利要求11所述的介质,其中,所述任务是所述第一组多个任务和所述第二组多个任务中的最高优先级可运行任务。
13.如权利要求11所述的介质,所述程序代码还包括运行所述控制线程以执行与所述任务相关的程序代码的代码。
14.如权利要求11所述的介质,所述程序代码还包括运行所述线程以执行与所述任务相关的程序代码的代码。
15.如权利要求11所述的介质,所述程序代码还包括运行与所述任务相关的线程以执行与所述任务相关的程序代码的代码;运行所述线程以确定所述第一组多个任务和所述第二组多个任务中的第二任务是否与协程执行或特定任务线程执行相关的代码,如果所述第二任务被确定为与协程执行相关则运行所述线程以恢复控制线程并挂起所述线程的代码;以及如果所述第二任务被确定为与线程执行相关则运行所述线程以恢复与该第二任务相关的第二线程并挂起所述线程的代码。
16.如权利要求15所述的介质,所述程序代码还包括运行所述控制线程以执行与所述第二任务相关的程序代码的代码。
17.如权利要求15所述的介质,所述程序代码还包括运行所述第二线程以执行与所述第二任务相关的程序代码的代码。
18.如权利要求11所述的介质,所述程序代码还包括运行所述控制线程以执行与所述任务相关的程序代码的代码;运行所述控制线程以确定所述第一组多个任务和所述第二组多个任务中的第二任务是否与协程执行或与特定任务线程执行相关的代码;如果所述第二任务被确定为与协程执行相关、则运行所述控制线程以交换与所述任务相关的协程上下文和所述第二任务的协程上下文的代码;以及如果所述第二任务被确定为与线程执行相关、则运行所述控制线程以交换所述任务的系统协程上下文和所述控制线程的协程上下文的代码。
19.如权利要求18所述的介质,所述程序代码还包括运行所述控制线程以执行与所述第二任务相关的程序代码的代码。
20.如权利要求18所述的介质,所述程序代码还包括运行所述控制线程以确定所述第一组多个任务和所述第二组多个任务中的第三任务是否与协程执行或与特定任务线程执行相关的代码,如果所述第三任务被确定为与协程执行相关、则运行所述控制线程以交换与所述控制线程的协程上下文和所述第三任务的协程上下文的代码;以及如果所述第三任务被确定为与线程执行相关、则运行所述控制线程以恢复与所述第三任务相关的线程并挂起所述控制线程的代码。
21.一种系统,包括存储数据的数据库;以及与该数据库通信的数据库管理系统,所述数据库管理系统用于定义与协程执行相关的第一组多个任务,以及与特定任务线程执行相关的第二组多个任务;产生多个线程,所述多个线程中的每一个与所述第二组多个任务中的一个相关;运行控制线程,以确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或与特定任务线程执行相关;如果所述任务被确定为与协程执行相关,则运行所述控制线程以交换该控制线程的协程上下文和该任务的协程上下文;以及如果所述任务被确定为与线程执行相关,则运行控制线程以恢复与该任务相关的线程并挂起该控制线程。
22.如权利要求21所述的系统,还包括高速缓存拷贝,用于存储所述数据的一部分的拷贝,其中,所存储的拷贝与所述第二组多个任务相关,并且其中,所述数据与所述第一组多个任务相关。
23.如权利要求21所述的系统,所述数据库管理系统还用于运行与所述任务相关的线程,以执行与所述任务相关的程序代码;运行所述线程,以确定所述第一组多个任务和所述第二组多个任务中的第二任务是否与协程执行或与特定任务线程执行相关,如果所述第二任务被确定为与协程执行相关,则运行所述线程以恢复控制线程并挂起所述线程;以及如果所述第二任务被确定为与线程执行相关,则运行所述线程以恢复与该第二任务相关的第二线程并挂起所述线程。
24.如权利要求21所述的系统,所述数据库管理系统还用于运行所述控制线程,以执行与所述任务相关的程序代码;运行所述控制线程,以确定所述第一组多个任务和所述第二组多个任务中的第二任务是否与协程执行或与特定任务线程执行相关;如果所述第二任务被确定为与协程执行相关,则运行所述控制线程以交换与所述任务相关的协程上下文和所述第二任务的协程上下文;以及如果所述第二任务被确定为与线程执行相关,则运行所述控制线程以交换所述任务的系统协程上下文和所述控制线程的协程上下文。
25.如权利要求24所述的系统,所述数据库管理系统还包括运行所述控制线程,以执行与所述第二任务相关的程序代码;运行所述控制线程,以确定所述第一组多个任务和所述第二组多个任务中的第三任务是否与协程执行或特定任务线程执行相关,如果所述第三任务被确定为与协程执行相关,则运行所述控制线程以交换所述控制线程的协程上下文和所述第三任务的协程上下文;以及如果所述第三任务被确定为与线程执行相关,则运行所述控制线程以恢复与所述第三任务相关的线程并挂起所述控制线程。
全文摘要
一种数据库系统可以提供与协程执行相关的第一组多个任务以及与特定任务线程执行相关的第二组多个任务的定义。并且可以提供控制线程和多个线程的产生,所述多个线程中的每一个与所述第二组多个任务中的一个相关,以及控制线程的运行,以便确定所述第一组多个任务和第二组多个任务中的任务是否与协程执行或与特定任务线程执行相关。如果所述任务被确定为与协程执行相关,则可以运行所述控制线程以进行该控制线程的协程上下文与该任务的协程上下文的交换。如果所述任务被确定为与线程执行相关,则可以运行控制线程以恢复与该任务相关的线程并挂起该控制线程。
文档编号G06F17/30GK1967487SQ20061014944
公开日2007年5月23日 申请日期2006年11月20日 优先权日2005年11月18日
发明者乔格·W·门辛 申请人:Sap股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1