CN1592886A - 通过虚拟线程执行计算机多任务的方法及装置 - Google Patents
通过虚拟线程执行计算机多任务的方法及装置 Download PDFInfo
- Publication number
- CN1592886A CN1592886A CN01821855.5A CN01821855A CN1592886A CN 1592886 A CN1592886 A CN 1592886A CN 01821855 A CN01821855 A CN 01821855A CN 1592886 A CN1592886 A CN 1592886A
- Authority
- CN
- China
- Prior art keywords
- thread
- virtual
- virtual thread
- tabulation
- local
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Abstract
在计算机的操作中,多个字节码或伪码指令,至少一些包含多个机器码指令的伪码指令存储在计算机内存中,对于将由计算机执行的多个任务或工作中的每一个,自动产生各个执行上下文数据的虚拟线程。该虚拟线程的每个都包括(a)在执行各个任务或工作中将被执行的下一个的伪码指令的存储位置和(b)用于执行各个任务或工作需要的任何局部变量的值。至少一些任务或工作中的每个都承担包含多个机器语言指令的各个伪码指令的执行。在各个虚拟线程的控制下和在各个系列时间片或处理时隙内处理每个任务或工作,并且,在不同虚拟线程之间的每个上下文转接中,仅仅在完成当前执行的一个伪码指令的执行之后承担如此的上下文转接。
Description
技术领域
本发明涉及一种用于在计算机上同时执行多任务的方法及其相关的装置。
背景技术
大多数现代操作系统具有本地多任务或多线程能力,即,多线程能力内置进操作系统中,明显的例外是先于OS X的Macintosh操作系统(MacOS)的版本,该版本没有多少或没有多线程能力。不幸的是,所提供的多线程能力,依靠操作系统和硬件平台而不同。很多平台对能够同时存在的线程的总数目加以限制,并且一些平台根本不能有多线程。
为了正确地理解由软件和它们的解决方案中线程引起的问题,需要了解对多线程的通用方法和由大多数本地平台线程系统使用的特定方法。
同时执行多处理任务,一个显而易见的解决方案是在计算机系统中提供多套处理电路。但是,典型的台式计算机仅仅有一个处理器,并且即使高端工作站也仅仅有一到四个处理。
基本解决方案的软件是时间片,即,将处理器的时间划分成一系列小片,并且依此将每个小片专用于不同的任务或线程。典型地,依靠操作系统允许每个线程运行3ms到30ms之间,在该线程被挂起时,而另一个线程被允许运行。操作系统通常使用处理器的定时器中断来周期性地中断当前执行的线程并且激活操作系统的线程调度程序,一段存储当前线程状态或执行上下文的软件选择新的线程去运行,恢复新线程的已存储的执行上下文,随后允许处理器恢复正常执行,这个处理称为上下文转换。
上下文转换除了在时间片终止时发生之外,也会在线程进入等待状态时发生,线程处于等待状态时不做任何操作,除非有特殊事件发生,当线程进入等待状态时,线程调度程序受到请求并发生上下文转换,以便其它线程可能会使用剩余的时间片。
当线程试图访问已调页(page)到磁盘上的存储器时,会发生导致线程进入等待状态的典型事件。操作系统会将线程悬挂直到存储系统有机会在存储器中调页为止。其它导致线程进入等待状态的事件是线程对用户输入的检查以及试图对磁盘进行读取,对于后者,操作系统悬空一个线程直到磁盘读取完毕,当第一个线程等待从磁盘读取数据时允许其它线程执行处理任务。然而当线程产生剩余时间片时,另一个导致线程进入等待状态的事件会发生,例如,如果线程暂时没有更多事可做时就可能发生。
因为上下文转换会频繁发生,快速的上下文转换操作很关键。很多操作系统对系统中存在的线程数量有限制,Windows 95在系统不稳定前最多有约150~200个线程,然而对于BeOS,每个处理器最多有4096个线程。对于线程数的这种限制是操作系统预分配的结果,由于性能上的原因,当系统启动时,一个固定尺寸的存储器块用于线程表。
标准的非解释的(non-interpreted)编程语言将人可读的源代码编译成机读代码或可以直接由处理器读取的机器语言代码。
另一方面,解释的语言(interpreted language)将人可读源代码编译成解释程序可读代码(interpreter-readable code)或字节码。一个被称为解释器并使用机器语言编写的软件程序可以读取字节码并指导处理器执行适当的操作。
解释语言的一个重要优点是能对字节码进行设计以便独立于机器,它允许使用语言编写程序且编译成字节码在任何操作系统以及写有解释程序的硬件平台上运行。
当开发一种必须在所有平台上同等地运行的解释语言时,依赖于平台的本地多线程能够是最多存在的问题,交差平台翻译程序语言的目标是使得有可能在一个平台上用语言开发程序,然后在任何另一个由这种语言支持的其它平台上运行此程序而不需要作任何变动,Java就是一个试图创建这种语言的例子。
不幸的是,如果这种应用必须多线程,那么本地多线程功能的使用会立即限制应用能够运行的平台,应用程序在大多数MacOP(此操作系统没有线程能力)版本上运行时会立即受阻,以及这取决于应用程序要求同时有多少个执行线程,应用程序也可能会在Windows 95(最多约150~200个线程)上或者在BeOS(每个处理器最多4096个线程)上或是在其它平台上运行时受阻。
发明内容
本发明打算解决以上所说的问题并为具有不同平台和不同操作系统的计算机提供一个多任务的能力。根据本发明,独立平台意味着多线程是通过解释器的方法来完成,这个软件程序通过解释指令而形成解释后的编程语言。依照虚拟线程,解释器通过创建、维护和处理来执行多任务,这种方法消除了对本地平台线程能力的依赖,并为使用解释后的编程语言的多线交差平台提供了一个可靠办法。
在典型的解释的编程语言中,程序中的每一个指令必须通过解释器来读取并传给处理器,这意味着解释程序典型地会比机器语言程序运行得慢很多。就象在传统的多线程或时间片中那样,增加代码到解释器中来检查每个机器代码指令的定时器或计数器进行,必要时执行一个上下文转换会对解释后的程序性能产生很大的影响。
因此,本发明所期望上下文转换执行仅在连续伪代码之间和在伪代码不执行期间,从而在这里提到的使用多任务或多线程的计算机会反复执行与机器语言指令等同的指令,而不对定时器或计数器进行检查。
根据本发明,操作计算机的方法包含向计算机的存储器中存储多个的伪代码指令,至少是一些含有多个机器码指令的伪代码指令,以及由于多个的任务或工作中的每一项都是由计算机来执行,因此自动创建一个相应的执行上下文数据的虚拟线程,它包括(a)在执行相应任务或工作时所执行的下一个伪代码指令的存储位置;(b)在执行相应任务或工作时所要求的任何局部变量的值。多个任务或工作中的每一个都执行相应的伪代码指令中的一个,这些伪代码指令包含多个的机器语言指令。该方法还包括在各自虚拟线程的控制之下,对相应一系列时间片或处理时隙中的每个任务或工作用进行处理,或者在每一个不同虚拟线程之间进行的上下文转换中,这种上下文转换必须在当前执行的伪代码指令执行完之后进行。
而不是采用模仿细纹(fine-grained)机器语言指令传统的“虚机”方法(Java采用的方法),本发明的虚拟线程使用了一个带有不精练指令的解释语言,也就是说每个指令要完成更大的任务。
例如:周机器语言(或模仿机器语言的解释语言)画一个盒子可能会由几百或几千个指令组成,每个指令对盒子中一个像素的颜色进行设定。
使用虚拟线程画一个盒子时只需要用一个指令,解释器会用机器语言对余下部分进行处理,这意味着对潜在上下文转换进行检查在盒子的整个绘制过程中仅需执行一次,是通过每一个指令而不是每一个像素来进行。
结果,解释器能处理多线程而对性能无很大的负面影响,。
依照本发明的另一特点,每个虚拟线程都是相应虚拟线程连接列表的一部分,每个虚拟线程包括一个指向相应连接列表中下一个虚拟线程的指针。对于不同虚拟线程之间的每一个上下文转换,计算机方法还包括参照当前执行的虚拟线程的指针来确定下一个要执行的虚拟线程。
执行本地平台线程所遇到的一般问题是同时存在于系统中的线程总数(包括活动线程和闲置线程)方面的限制。
例如,在Windows 95/98中,如果在所有应用程序中的线程总数超过约150-200,则系统会变得很稳定。遇到这种情况的测试系统所表现出的行为包括自动重动、随机键盘输入、随机性的移动鼠标、内存损坏以及随机出现的应用程序崩溃。
虚拟线程所用的较不精练的指令集的后果之一是上下文转换时间不紧,这意味着需要花额外的时间在连接列表上存储线程,结果,虚拟线程允许有大量的仅受系统中可用内存总数限制的线程。
本发明期望虚拟线程(此虚拟线程通过计算机管理或调试任务或工作的执行。)被储存在多个连接列表中,包括一系列闲置虚拟线程列表、活动虚拟线程列表以及列队虚拟线程列表。计算机方法还包含周期地从队列虚拟线程的列表中移动至少一个虚拟线程到活动虚拟线程的列表中,从队列虚拟线程的列表向活动虚拟线程的列表移动虚拟线程一般包括:(a)设置一个互斥体对列队虚拟线程的列表进行锁定;(b)然后在下列一些情况对指针进行修改:(i)移动的虚拟线程;(ii)最初至少一个虚拟线程(在活动虚拟线程列表中);(iii)至少一个虚拟线程保留在列队虚拟线程列表中;(c)然后重新设定或释放互斥体,以便能对列队虚拟线程的列表进行访问。
依照本发明的另一个特点,每个虚拟线程包括一个互斥体,然而计算机方法还包含对选定一个虚拟线程的互斥体进行设定,然后对选定虚拟线程中的数据进行修改,接着重新设定或释放互斥体,以便能对选定虚拟线程进行访问。设定选定虚拟线程的互斥体、修改数据以及重新设定或释放互斥体以响应虚拟线程中另一个的信息,对数据的修正典型地包括对选定虚拟线程的指针进行修正。
依照本发明的另一个特点,每个虚拟线程都被分配了一个信息队列,计算机方法还包括在依照虚拟线程中的另一个执行任务或工作时,在选定虚拟线程中的一个的信息队列中进行信息的输入。这些线程可能与不同应用程序中相应的任务或工作对应,由此,在选定虚拟线程中的一个的信息队列中进行的数据信息输入实现了不同程序间的进行数据传递。在线程间信息传递的另一个应用中,选定线程与其它线程都是不同计算机上的代理线程或界面线程,那样,在信息队列中进行的信息输入就包括传送信息在计算机之间的信息链路上,此信息链路可能是个人计算机网络,例如:被称为“因特网”的全球计算机网络。
正如上所指,创建虚拟线程,处理相应一系列时间片或处理时隙中的任务或工作,以及进行都包括在译码程序下进行的计算机操作的上下文转换。本发明还期望在计算机上运行多个解释程序实例,每个实例对应一个本地线程,每个本地线程创造相应的执行上下文数据的虚拟线程集,并在相应虚拟线程的控制下对相应一系列时间片或处理时隙中多个任务或工作进行处理。每一个不同虚拟线程之间的上下文转换仅在当前执行的伪代码指令中的一个执行完毕之后才进行。
多个本地线程的运行更适宜将单个处理器上的线程限制在小的数量,例如一个或两个线程。在处理器有内在的多线程能力的地方,这种限制就释放其它基于平台的本地线程用来执行其它的应用程序。
因为虚拟线程允许创建无数的线程并且这些线程具有很低的开销,一个使用虚拟线程的语言编写的程序可以使用一种独特的编程方法的优势。
这种编程方法包括使用大量的线程,显示屏上的每一个用户界面设备使用一个线程,例如:一个按钮就有一个它自己的线程。一个滚动条有4个线程,其中每个按钮各一个,中央条一个,还有一个主线程。线程不被限制在用户界面设备上,例如:一个服务程序能创建一个线程以便对每个客户的要求进行服务。
典型的应用程序可以有成百到几千个的线程,这取决于应用程序的特点,对于在一个系统上运行的多个应用程序,会很快超过Windows 95(150-200个线程)的本地线程能力,并且甚至是在拥有更大或无限线程能力的平台上运行,也会对性能产生负面的影响,另一方面,对虚拟线程进行特别的设计,以便对这些问题进行处理,使得有可能用上万个线程来运行多重应用程序而又不会有任何性能上的问题。
因为用户界面代码不需要跟踪成百的用户界面装置,所以线程的广泛应用较大地简化了复杂应用程序的创建,即每个线程运行一个简单的程序,此程序保持由此线程负责的单个用户界面装置的踪迹。
这个导致较简单的创建且较容易的调试和维护的小程序。
根据本发明的另一个特点,选定的一个虚拟线程处于闲置状态的地方(例如:在闲置线程的列表中)计算机方法还包括产生消息以响应从计算机外部源的输入,在选定虚拟线程的消息队列中插入消息,以及将选定线程从闲置状态变到活动状态,然后,时间片或处理时隙被分配给选定线程时访问信息队列以获得信息。这个过程依照与相应线程相关事件的发生将虚拟线程从非活动状态或闲置状态转化为活动状态,例如:此事件可以是由计算机外部源所产生的,或通过操作者启动键盘按键,或通过一个来自远程计算机的信息。
根据本发明,以解释器为媒介的虚拟线程可以通过一个适当的技术对不同任务或工作区分优先次序,在每个虚拟线程都包括一个线程优先级别的地方,计算机方法还包括在多个虚拟线程中自动参照线程的优先级来确定相对优先级,并根据所确定的相对优先级改变线程的次序。在一个区分优先次序的技术中,将多个时间片或处理时隙给予一个优先级比第二个线程的优先级高整数倍的给定线程,此时间片或处理时隙的数量是给予第二个线程的时间片或处理时隙数量的整数倍。
虚拟线程(伴随其相应的任务)优先次序的区分也为不同本地线程中的分配处理负载提供了一个机会,在那里会使用一个以上本地线程。一个线程可能被分配一个重新分配虚拟线程的任务,从拥有平均优先级以上任务的本地线程到拥有平均优先级以下任务的本地线程。通常,线程的转换限制到活动线程。
正如在其它地方讨论过的一样,在相应虚拟线程的控制之下,在相应一系列时间片或处理时隙中所处理的任务包括成像于计算机显示器上的控制对象,每个对象构成分配了一个相应虚拟线程的独立任务或工作,根据本发明,通过一个解释器分配给相应的虚拟线程的处理的任务或工作还包括监视计算机键盘按键的活动,每个按键构成一个由相应虚拟线程分配的独立的任务或工作。
最好,通过计算机连续执行伪代码指令来测量时间片或处理时隙,对于多个时间片或处理时隙中的每一个来说,计算机方法还包括在计算预定的连续执行伪代码指令数时,终止相应的时间片或处理时隙。
根据本发明的一个特别的实施例,多任务计算机包含一个存储器、一个显示器、一个输入外围设备以及至少一个与存储器、显示器以及输入外围设备动态相连的处理器,该处理器有一个将人工输入源码转换为字节码或伪代码指令的编译器,而该编译器与存储器动态相连以便能将节码或伪代码指令储存在那里,该处理器还有一个用来执行节码或伪代码指令的解释器。所述存储器储存第一闲置虚拟线程的连接列表,第二个活动虚拟线程的连接列表,以及第三个列队或等待虚拟线程的连接列表。每个线程包括上下文或状态数据,一个互斥体以及指向相应列表中下一个线程的指针。解释器与输入外围设备动态相连以便识别由输入外围设备所产生的事件,也与存储器动态相连(a)用于将至少一个闲置虚拟线程从第一个连接列表移到第三个连接列表;(b)用于将列队或等待虚拟线程从第三个连接列表移到第二个连接列表;(c)用于依照预定的优先级安排,在连续的时间片或处理时隙中,根据第二个连接列表中不同虚拟线程的上下文或状态数据来执行指令。解释器动态地与显示器部分连接是为了修正显示器上的对象以响应第二个连接列表中相应活动虚拟线程所指定的指令。
此外,存储器还储存本地线程的第四个连接列表,那样的话,解释器就是多个普通解释器的实例的一个,每个普通解释器的实例对应于一个本地线程。第二个连接列表也是多个连接的活动线程列表之一,每个本地线程通过指向相应的一个活动线程连接列表的相应的指针来连接,当第三个连接列表是多个连接的列队线程列表之一时,每个本地线程通过指向相应的列队线程连接列表相应的指针来连接。
根据本发明的又一特点,解释器包括用来将虚拟线程从第一个本地线程(其负荷比平均负荷重)移到第二个本地线程(其负荷比平均负荷轻)的可编程的电路。
闲置虚拟线程的列表或表格(table)最好包括多个分配给键盘各按键的线程,用来处理各按键的活动,此外,还包括多个分配给显示图象中各对象的线程,用来处理对各对象外观的修改。
在解释器包括一个上下文转换模块以及一个指令计数器的地方,上下文转换模块与存储器以及指令计数器动态相连,用来在根据当前执行活动线程执行预定数量的字节码或伪代码指令时,在第二个连接列表中执行一个从当前执行活动线程到下一个活动线程的上下文转换。
每个虚拟线程包括各线程中要执行的下一个指令的存储位置,各线程的任何一个局部变量以及各线程执行的优先级。
根据本发明的又一特点,存储器储存多个分配给各线程的消息队列以及至少一个具有执行上下文的代理线程或界面线程,用来通过通信链路实现与远程计算机之间的通信,此通信链路就是诸如因特网的计算机网络,代理线程或界面线程包括一个通向网络协议例行程序的存储地址。
根据本发明的又一实施例,多任务计算机包括储存多线程或多任务的状态数据或上下文数据的存储器以及执行一系列字节码指令的解释器,每一个字节码指令由多种机器码步骤组成,程序化的解释器是为了定义通过计算机执行每一个任务的相应的虚拟线程;为了执行相应的当前线程的字节码指令,此当前线程是从一系列连续的时间片中每一个时间片的虚拟线程中选定;还为了执行从所述的一个虚拟线程到另一个虚拟线程的上下文转换,此上下文转换仅在执行完字节码指令中的一个之后才进行。
本发明所提供的各个优点通过在这里的描述会变得很明了。
附图说明
图1是一个根据本发明的并入虚拟线程能力的计算机系统的方框图;
图2是图1中所示处理器的选定元件方框图;
图3是图2中所示解释器的选定元件方框图;
图4是在存储器中储存的线程状态数据的图表,示出了数据的连接列表结构;
图5A和5B示出了选定操作的流程图,这些操作由2中的解释器来执行;
图6示出了使用本发明虚拟线程的两个计算机之间交流的方框图;
定义
术语“多任务”用在这里是指在一台计算机上同时执行多重任务。
术语“伪代码”用在这里是指通过解释器编译后执行的计算机指令,解释器是一个用来将机器语言翻译成伪代码程序的程序,并在被翻译时执行指定的操作。“伪代码”与特殊计算机的硬件无关,它要求在程序使用之前被转化为计算机能使用的代码。许多伪代码指令必须执行多个机器语言指令,有时候伪代码就是指“字节码”。
术语“任务”或“工作”用在这里是表示由计算机执行的任何功能。任务或工作可能按规模从诸如改变处理器注册器的内容的简单操作到要求执行许多伪代码指令的大的复杂操的变化。任务或工作的例子包括:(a)监视用户输入外围设备,如键盘及其每一个按键;(b)在监视器或显示器上产生对象并对其进行修改,如菜单、按钮、窗口、滚动条、图标以及背景样式;(c)在网络上或其它通信链路上与远程计算机通信;(d)应用程序,如文字处理器、电子表格、多媒体播放机以及计算器等等;(e)应用程序的各种组件或功能,如编辑、打印、拼写检查以及其它文字处理器的功能。
术语“时间片”或“处理时隙”用在这里表示处理器时间段。在传统的多任务计算机中,所有的时间片在持续时间上是相同的,这可以通过一个时间基数(time base)或定时器中断信号来测量。根据即将公开的本发明,时间片或处理时隙既可以通过传统的多任务计算机的计时器也可以用指令计数来测量,在后者中时间片或处理时隙的持续时间不必是相等的。
单词“线程”用在这里是指通过计算机完成或实现一个任务或工作的执行上下文,此执行上下文在一系列时间片或处理时隙中被使用或跟踪。术语“虚拟线程”在这里是指一个由解释器创建、储存、修改、处理并跟踪的线程。术语“本地线程”在这里是用来指定线程内置于特殊计算机的操作系统中,在计算机操作系统有多重本地线程能力的地方,可以使用多个的本地线程,每一个这样的本地线程运行相应的解释器实例。
术语“互斥体”在这里是指可以锁定的对象,它可以在某个时候被一个线程设置或锁定,以免其它线程对程序、虚拟线程、存储区或其它计算机系统中的其它元件进行访问。本地线程实现使用互斥体以同步方式对数据访问,该数据在两个线程间共享。使用互斥体很重要,因为互斥体的使用可以避免在多线程间同时企图修改同样数据的多线程之间的冲突。互斥体用来描述共享数据,线程必须在试图访问数据之前锁定互斥体。
“连接列表”是一个在软件工业中常用的结构,其列表中的每个入口都包含列表中下一个入口的存储位置。这个连接允许向列表中插入或从列表中删除入口,而列表中其它入口不动。一个项目的删除只是项目前驱站(predecessor)发生了改变,以便前驱站指向下一个项目后继站(successor)的地址,从而释放了由项目所占用的内存。
术语“上下文转换”在这里是用来指定一个过程,其中当前执行线程被中断,线程的状态或执行上下文被存储,然后选定一个新的线程来运行,已存储的新线程的执行上下文很快在接下来的计算机操作中得到修复和跟踪。
具体实施方式
如图1中的图解,计算机系统包括一个处理器12、一个键盘14、显示器16以及一个存储器18,处理器12通过一个计算机网络(如因特网22)与远程计算机20相连。如图2中所示,处理器12包括一个解释器24,解释器24用普通数字计算机电路的典型功能,该普通数字计算机电路通过编程来修正,以便执行多重计算机功能,包括解释键盘的活动和控制显示器16,以及特别是控制显示器上对象的外观以响应用户通过键盘14输入命令,或者响应所接收到的来自因特网22上的计算机20的信息。处理器12还包括一个编译器26(它可以是解释器24的一部分),该编译器26用来将人工源代码转换成存储在存储器18里面的字节码或伪代码。
如图3中所示,解释器24包括一个代码执行单元28,该代码执行单元28与存储器18动态连接在一起以便读取字节码,并且根据字节码执行一些操作,解释器24还包括一个指令计数器30,指令计数器30与代码执行单元28相连以便跟踪在当前时间片或处理时隙中处理的字节码指令数。计数器30与上下文转换模块32动态相连,依次模块32与代码执行单元28相连,用于根据由代码执行单元28所预定的字节码指令数量的计数,在解释器24的执行上下文中引起变化。,执行转换(execution switch)会更早出现,即,在特定环境下(例如进入等待状态),也就是在计数完成之前出现。
在以下一些讨论中,假设解释器24只是在处理编译过的字节码,事实上,编译器26(可能是解释器的组件或者是独立的程序)必须将人可读源代码译成字节码,编译器是软件工业中的标准(C+、C++、Basic、Pascal、Java以及许多其它语言都必须在它们能够运行前对它们进行编译)。编写编译程序的技巧是许多编程者要掌握的常识,因此,即将公开的发明没有对编译器26做进一步的讨论。
解释器24通过虚拟线程的创建和连接以及根据相应的虚拟线程或在相应虚拟线程的控制之下实现相应时间片或处理时隙中的多任务。在下文中假设解释器24是一个栈式解释器(stack-based interpreter),实际上,虚拟线程会与任何一种类型的解释器一起工作,无论它是栈式解释器还是其它类型的解释器。
考虑下面的字节码,它在计算机显示屏16上坐标为x=10,y=10的点和坐标为x=20,y=20的点之间画一个盒子。
指令
参数
PUSH INTEGER 10
PUSH INTEGER 10
PUSH INTEGER 20
PUSH INTEGER 20
DRAW BOX
在栈式语言中,头4个指令向堆栈压入10、10、20、20这四个值,盒子绘制指令从堆栈中移动上面的四个值,并用这四个值作为坐标来绘制盒子。
这个字节码指令在下面要进行的有关解释器24和虚拟线程的讨论中将当成编程的示例。
虚拟线程
虚拟线程基本上是一个执行上下文。执行上下文包括:(a)在线程中要执行的下一个指令的存储位置;(b)线程的任何局部变量值;(c)线程的调用堆栈;(d)线程的优先级别以及其它特征;(e)编程语言必须以每个线程为基础进行存储的任何其它数据,例如错误状态数据。字节码不是线程的一部分,几个线程能同时运行相同的字节码。线程只是维护一个指向存储器中即将执行的下一个字节码指令的指针。
线程可以处于四种状态中的一种:
(1)闲置状态:闲置虚拟线程是纸暂时无事可做的线程,例如:一个正在等待用户输入的线程(如一个按键)就是一个闲置的,就象一个等待定时器终止的线程。闲置线程被存储在一个独立于活动线程的列表中而不占据任何处理器时间。
(2)列队状态:虚拟线程准备激活,并且已经被分配了一个正在运行解释程序的本地线程,但此本地线程正忙于执行一个指令而不能将虚拟线程移到它的活动列表中,直到执行完这个指令。
(3)活动状态:虚拟线程在本地线程的活动列表中,并且是一个从本地线程接收时间片的虚拟线程。
(4)当前状态:当前虚拟线程常常也是一个活动虚拟线程,当前虚拟线程是一个当前执行的虚拟线程,即,本地线程给了它一个时间片,它就在这个时间片中。
连接线程列表
如图4所示,解释器24将线程状态以及上下文数据作为一套连接列表存储在存储器18中,其中有两个主要的连接列表:一个闲置线程表格34和一个本地线程表格36。指向这些列表34和列表36中每个列表的第一个入口的指针38和40被存储在解释器24中的全局变量里。
闲置线程表格34存储系统中所有闲置虚拟线程42的列表,这些闲置虚拟线程42保留在闲置线程表格34中直到引起线程重新激活的相应事件发生。在闲置线程表格34中的每个入口或闲置虚拟线程42都包含有线程状态和上下文数据44,互斥体46用来控制对线程状态以及上下文数据的访问,指针48包含列表中下一个入口的存储位置。
本地线程表格36包含每个本地线程50的入口,本地线程50正在运行解释器24的实例,并能接受执行的虚拟线程。在一些平台上,例如,无本地线程能力的MacOS的一些版本,本地线程表格36中仅有一个入口。在本地线程表格36的每个入口50中都包含一个互斥体52、指向活动虚拟线程58的连接列表56的指针54、还有指向列队或等待虚拟线程64的连接列表62的指针60,以及另一个指向本地线程列表36中下一个入口的指针66。
虚拟线程58和64的连接列表56和62使用的格式与闲置虚拟线程42的连接列表34相同,单独的活动线程58以及单独的列队线程64具有与闲置线程42相同的结构。每个本地线程50周期将线程从列队虚拟线程64的连接列表62中移到相应活动虚拟线程58的连接列表56中。当本地线程通过执行单元28执行指令时,本地线程50不使用其列队线程64,所以相应的连接列表62可以被锁定,并且线程可以放到队列中而不必锁定本地线程的活动列表56,从而改善了多处理器系统的性能。
互斥体52用来对列队虚拟线程64的相应连接列表62进行同步访问,本地线程50(或是自己的或是另一个本地线程)必须在能够获得相应队列62之前锁定相应的互斥体52。图4中其余的线程结构不要求有互斥体,因为唯一具有访问功能的线程就是各自的本地线程。
解释器24将大部分时间花在一个循环上(就象任何解释器一样),例如图5A和图5B所示,在这个循环内,解释器24执行多个的操作来支持虚拟线程。
OS维护任务
解释器24必须定期执行的任务之一是操作系统维护70,关于此任务的细节根据平台而变化。典型地,只有一个本地线程50需要执行维护任务70,而其它本地线程只执行字节码指令。在有些平台上,一个完全独立的本地线程被用来进行维护任务,本地线程表格36中的所有本地线程都用来执行字节码,另一方面无本地线程能力的平台(也就是说,辅助的多任务系统,如OS X之前的MacOS各版本)必须周期执行维护任务,以便让系统时间上的其它任务运行。
作为操作系统维护70的一部分,典型的任务执行包括操作系统事件循环的反复(如Macos平台上的calling GetNextEvent(),或Windows平台PeekMessage()/GetMessage()/TranslateMessage()/DispatchMessage())。
事件处理
执行维护任务70之后,解释器24特别是其中的指令执行单元28会进行一个查询72弄清在本地线程50的活动线程列表56中是否有虚拟线程,在活动线程列表56中至少有一个活动线程58处,解释器24对事件进行活动检查74(active check),在列表56中没有活动线程58处,解释器24在76等待事件,从而将处理器时间释放给系统上的其它应用程序。
当一个事件出现时,事件被编码成消息放到适当虚拟线程的消息队列中,每个虚拟线程都可能有自己的消息队列,如果相应的虚拟线程是一个闲置线程42,它一定会被重新激活,这还包括找到一个本地线程50,而闲置线程则作为一个列队或等待线程64被分配给此本地线程50。
如图5A所示,如果事件检查步骤74导致一个侦察事件发生,就象由解释器24在决断连结78所确定的那样,解释器24在步骤80识别接收线程,然后在步骤82锁定接收线程的信息队列,这个锁定也是由解释器24在步骤76接收到一个事件通知后进行的,随后,解释器24在步骤84调查是否接收线程为闲置线程,如果接收线程是闲置线程42(正如在调查步骤84中由解释器24所确定的),则全局闲置线程列表34在步骤86被锁定(互斥体未显示出来)。然后接收线程在步骤88从闲置线程42的连接列表中被移走,这种移动一般会改变闲置线程列表34中紧挨接收线程之前的虚拟线程的指针48,以至于指针识别闲置线程列表34中紧挨接收线程之后的虚拟线程。
在步骤88中将接收线程从闲置线程连接列表34中被移走之后,解释器在步骤90锁定列表34,在接下来的步骤92中,解释器24扫瞄或穿过本地线程50的连接列表36以便找到具有最轻负载的本地线程。本地线程负载可以被计算出来当作分配给本地线程的虚拟线程的数量,尽管一般来说最好是通过计算分配给物理线程的所有本地线程(即,在物理线程的活动列表和队列中的所有本地线程)的优先级之和来精确计算本地线程负载。选定的具有最轻负载的本地线程50的列队互斥体52在步骤94被解释器24锁定。刚刚从闲置线程列表34中被移走的接收虚拟线程接着又在步骤96被加到选定的本地线程50的列队线程列表62中,然后相应的互斥体52在步骤98被解锁。在接收线程以及列队线程列表56中紧挨接收线程之前的线程中插入接收线程时,增加接收虚拟线程到列队线程列表56会对两个指针进行修正。
如果接收线程不是非活动的或闲置的线程42(正如在调查步骤84中由解释器24所确定的),则启动一个例行程序100用来将列队线程64从连接列表62转移到相关的活动线程列表56中去。在将一个接收线程从闲置线程列表34转移到最闲的本地线程50的列队线程列表56中之后,例行程序100也由解释器24来执行。在例行程序100的第一步骤102中,解释器24锁定本地线程的列队互斥体52,然后,解释器24在检查步骤104检查是否列队线程列表62至少包含一个虚拟线程64,如果是,则队列中的第一个线程将在步骤106从此队列中被移走并在步骤108被增加到相应的活动线程列表56中。此外,虚拟线程从一个列表向另一个列表的这种转移仅仅只是三个指针的改变(即被移动的线程的指针以及两列表中紧挨此之前的的线程)。当完成线程的转移之后,解释器24在结110判断是否新被转移的虚拟线程处在比当前执行线程更高级别的优先组中,如果是,则在步骤112中解释器24和特定的模块32(如图3所示)会执行一个上下文转换,以至于新被转移的线程变为当前执行线程,然后列队互斥体52在步骤114被解锁。
定时器处理
在流程图图5A和图5B中不包括定时器处理,因为定时器处理不是虚拟线程的关键部分。然而编译语言通常会需要给编程者提供一种设定定时器的方法。
用虚拟线程执行定时器的最有效办法是保存所有定时器的全局列表在存储器18中,该列表将被排序以至于将终止的定时器最早排在列表的起始处。
每次主解释程序循环反复进行(如图5A和图5B所示),通常在事件处理期间,解释器24会检查定时器定时器列表中的第一个入口以确认是否此入口已经终止,如果没有终止,由于列表中后面的定时器在列表中第一个定时器之后终止,因此没有其它已经终止的定时器,如果定时器已经终止,它将会从列表中被移走,并会产生一个事件,此事件会使合适的的虚拟线程被激活(如果它还不是活动状态的话),并且此线程会在检查其队列时找到定时器终止事件。
如果没有虚拟线程被分配给本地线程并且本地线程因此等待事件(步骤76)而不是检查事件(步骤74),则解释器24必须在等待事件之前检查定时器。如果在列表中有定时器,则解释器必须设定操作系统定时器以至于当定时器终止时操作系统产生一个事件释放此等待。
注意到对不同的操作系统其定时器具有不同的精度是很重要,如果在列表中第一个定时器上的保持时间少于操作系统定时器的精度,则解释器24可能不会等待消息但必须检查消息,以至于产生必要精度的时间终止事件。
线程间消息
通常,虚拟线程需要一些交流的方法以使他们互相之间能进行数据交换。
在传统多任务计算机系统中,本地线程一般是通过将数据放在存储器中(以便数据能被所有线程访问)然后锁定对存储器的访问(以避免多线程同时访问数据)的方式来进行数据共享。这里所说的虚拟线程使用不同的线程之间信息交换的方法。一个消息包含一个能唯一识别消息类型的标识符(如字符串“mouse-move”就可以是一个消息的标识符)以及一批数据。该批数据可以是任意格式和任意大小。(尽管由于性能原因大批几兆字节大小的数据不可取,因此一系列较小的信息在这种情况下就成了首选。)
以响应从操作系统接收到的外部事件能够产生消息(包括用户输入事件,如鼠标移动、按下键盘按钮等等)或响应一个虚拟线程的字节码中的指令。
在流程图图5A的事件处理部分示出了一个信息是怎样以响应一个事件被加入到一个线程的消息队列中,相同的技术用在增加一个信息到线程的信息队列中以响应一个字节码指令。有一个例外,在线程将一个信息放到它自己的信息队列中的情况下必须注意避免锁定部分线程的上下文,该线程的上下文已经被当作部分执行字节码指令锁定,避免试图在两个可能引起死锁的地方进行锁定,该死锁依赖于平台的互斥体的执行。
将线程从活动队列移到活动列表
当一个虚拟线程被激活以响应一个信息或一个事件时,虚拟线程会被放到合适本地线程50的列队线程列表62中,而不是直接放到此本地线程的活动线程列表56中,因为本地线程的活动列表56只能被本地线程本身访问,因此列表56不一定要被锁定。避免锁定本地线程的活动线程列表56而只是锁定列队线程列表62会对性能有所改善,因为本地线程50可能正忙于执行一个指令,正在进行激活的本地线程(可能是在不同于异步运行在不同的处理器上的线程)不一定要等待此指令执行完毕。
因此,本地线程负责定期地将线程从它的活动队列中移到其活动列表中。
上下文转换
在本地线程列表36中的本地线程入口处,每个本地线程50储存一个指向当前执行虚拟线程的指针(如:指针54)。上下文转换只是包括改变这个指针使其指向活动线程列表56中的不同虚拟线程58,在此指针的地址处,由指令执行单元28(如图3所示)实现的指令执行代码使用虚拟线程列表入口处的线程上下文,因此对于一个上下文转换不需要其它动作。这意味着上下文转换操作会很快,但由于此指针的间接性,执行指令会比通常情况下稍慢。
线程优先级
每个虚拟线程42、58、64被分配有一个优先级,如果多线程在同时是活动的,即,如果活动线程列表56包含一个以上的线程58,则有较高优先级的线程会收到更多处理器时间。
线程优先级的重要应用之一是给线程一个响应用户输入的优先权利,例如:此优先权能使解释器24在操作者激活键盘上的一个按键时,立刻修正显示器16上的对象,而操作者会立刻从计算机收到反馈信息显示他的指令已经被接收和处理,从而用户知道键盘14以及处理器12处于工作状态而没有被冻结,也没有其它的故障。
例如,考虑一个具有“打印”按钮(如显示器16上所示的对象)的应用程序,该按钮作为用户输入装置被分配了它自己的虚拟线程42、58、64,按钮的线程会发大部分时间在闲置线程列表34中。当用户点击此按钮(点击鼠标是一个用户输入事件)时,其线程被激活。然后该线程必须重新拖动此按钮使其看上去象被按下去了一样,之后线程发送一个消息给其它一些线程以便通知其它线程此按钮被按下,然后其它线程会做一些必要的事,例如,打印一个文件。
通过给按钮线程分配高于其它应用任务的优先级,可以保证当用户点击按钮时会立即有一个视觉的反应(按钮被重新拖动看起来象被按下),即使系统正忙于其它任务。
一个简单的优先级系统,如流程图图5A和5B中所展现的,通过给每个线程分配一个数值作为其优先级,一般,这个值在0到100之间,数值越大表示优先级越高,但任何范围的值都可以被使用,在这个简单的优先级系统中,如果在相应的活动线程列表56中有更高的优先级线程存在,则一个给定的活动线程58不会被分配任何处理器时间。此系统中每一个本地线程50明了活动列表56中最高优先级虚拟线程58的优先级(此优先级可以被称为最高活动优先级),当一个本地线程50执行一个上下文转换,并且必须选定一个新的虚拟线程58使之变更当前虚拟线程时,本地线程50总是选择处在最高活动优先级的列表56中的下一个虚拟线程,从列表的起始端开始直到虚拟线程到达列表的末端。每个本地线程50也保持对处在最高活动优先级的活动虚拟线程58的数量的跟踪。
在这个简单的优先级系统中,无论何时本地线程50将虚拟线程从相应的列队线程列表62中移到相应的活动线程列表56中,如果此虚拟线程处在一个比最高活动优先级更高的优先级,则新的线程的优先级会被调整为最高活动优先级,最高活动优先级上的线程数量被设定为1,而且会执行一个上下文转换以便使新线程成为当前虚拟线程。如果新的虚拟线程的优先级与最高活动优先级相等,则处在最高活动优先级的线程数会有增加。
无论何时活动虚拟线程58终止或变为闲置,相应的本地线程50会减少处在最高活动优先级上的线程数,如果此线程数达到0,则本地线程50扫瞄其活动列表56来确认新的最高活动优先级以及在此优先级上新的线程数,并执行一个上下文转换使合适的线程变为新的当前虚拟线程。
最后,如果活动虚拟线程58的优先级增加,并且新的优先级比当前最高活动优先级更高,则最高活动优先级必须被调整,并且此线程必须变为新的当前线程。同样地,如果活动虚拟线程58的优先级降低,如果此虚拟线程以前是在最高优先级,则相应的本地线程50必须扫瞄其活动列表56来确认新的最高活动优先级以及在此优先级上新的线程数,然后执行一个上下文转换确定一个合适的的线程变为新的当前虚拟线程,由解释器24执行的指令的结果是可以改变优先级别。
高级线程优先级
更高级的系统能为线程优先级所使用,但是对于虚拟线程工作不是绝对必须的,这个更高级的系统使得虚拟线程58有可能获得处理器时间(即使有一个更高优先级线程是活动的),这要通过使用优先组来实现。
在一般的执行中线程的优先级将会是一个从-9999到+9999之间的值(包括±9999),一个线程的优先组等于线程的优先级除以100以后取整,例如:
优先组 组中最低优先级 组中最低优先级
-3 -399 -300
-2 -299 -200
-1 -199 -100
0 -99 +99
1 100 199
2 200 299
3 300 399
在前面章节中所说的简单线程优先级系统的规则还在被使用,而且这些规则代替优先组的使用,因此,如果在一个更高优先组中有一个活动线程,则给定的活动线程58将不会收到任何处理器时间。然而,在相同优先组内的线程58基于其在此组内优先级会收到处理器时间。线程优先级是相对的,给定2个优先级P和Q,优先级为P的线程会收到一个时间片,优先级为Q的线程会收到(Q-P)+1个时间片,因此,一个优先级为N的线程会收到一个时间片,而优先级为N+3线程回得到4个时间片。例如,考虑下列线程:
线程ID 线程优先级
A 50
B 120
C 121
D 122
E 124
如果所有这些线程同时都是活动的,则由于线程A比其它线程的优先级低,因此线程A将不会运行,其余线程将被分配到时间片如下:
B C D EEE D EEE C D EEE D EEE B C D EEE D EEE C D EEE D EEE
也就是说,从38个时间片里,线程B会收到2个时间片,线程C会收到4个时间片,线程D会收到8个时间片,线程E会收到24个时间片。
此时间片的分配通过对每个活动虚拟线程58(如图3所示)的跳跃计数器116进行维护来实现,每个计数器116有一个初始值0。无论何时一个上下文转换发生以及一个新的线程58必须被选定执行,选定的线程自然会在最高优先组中,然而此选定的线程可能不是活动的最高优先级线程,在相同优先组中可能有另一个更高优先级线程。因此,如果H是具有最高优先级的活动线程58的优先级别;P是另一个活动线程优先级别,此活动线程是被定作为新的当前虚拟线程并用来执行上下文转换操作的;S是新的当前虚拟线程的跳跃计数器的值(初始值为0)。如果S≥(H-P),则通常会发生上下文转换,否则,相应的跳跃计数器116会增值,线程会被越过,而另一个活动线程58会被选作当前线程。
此程序在图5A中进行了说明,解释器24首先进行一个检查118以确认在活动虚拟线程58的相应列表56中是否有与当前线程相同优先组的线程,乐观的结果导致解释器24在步骤120中选择当前优先组中的下一个线程。正如所述讨论的那样,接着,解释器24在步骤122中确定当前优先组中的最高优先级活动虚拟线程的优先级别H、选定线程的优先级别P以及选定线程的的跳跃数S,在后来的确定结合124中,解释器24查询确认是否跳跃数S大于或等于当前优先组中的最高优先级活动虚拟线程的优先级别H与选定线程的优先级别P之差,如果跳跃数S大于或等于H-P之差,解释器24会在步骤126中重新设定选定线程跳跃计数器116到零,并在步骤128中进行上下文转换。选定线程此时已经变成当前执行线程。如果跳跃数S小于H-P之差,解释器24将增大步骤130中选定线程的跳跃计数器116的容量,并返回到步骤120来选择活动虚拟线程56的当前优先组中的其它线程。
每件事都以线程58的相对优先级而不是绝对优先级为基础,无论怎样,发生在一对优先级为10和20的线程上的跳跃操作数与发生在一对优先级为510和520的线程上的跳跃操作数相同,优先级差是10,则具有较低优先级的线程会收到一个时间片,具有较高优先级的线程会收到10个时间片。
执行指令
在活动虚拟线程58的一个时间片中,被分配有虚拟线程的本地线程50的解释器24,特别是指令执行单元28,会尽可能快地反复读取(步骤132)并执行(步骤134)来自虚拟线程的指令,在步骤134执行完每一个指令之后,本地线程50(即,解释器24的一个相应实例)会进行一系列检查136、138、140以确认指令的结果是否是当前虚拟线程正在变为闲置,或刚被执行的指令的结果是否是当前线程正在终止,或虚拟线程的时间片已经终止。如果这些条件有任何一个为“真”,则本地线程50或相应的解释器24将停止执行来自虚拟线程的指令,直到线程变为活动的或是被分配了一个新的时间片为止。
时间片或处理时隙可以通过使用一个定时器或一个指令计数来计算,后者由指令计数器30(如图3所示)来跟踪完成,一般最好是用指令计数的方法来测量,因为每个指令的花费低得很多。检查时间片是否已经终止仅仅只是增加一个计数器变量,然后测试此计数器变量是否已经通过了最多数量的时间片指令。指令数与预定最大数的比较可以通过上下文转换模块32(如图3所示)来进行。
选择合适大小的时间片承认时间片越长,对处理器12的利用更有效,从而使工作得更快;但是减小在给定时间内能发生的上下文转换数,会导致用户界面性能的不稳定;根据基本的操作系统、硬件平台以及应用程序的特点,不同大小的时间片具有不同的意义;一般,每个时间片的大小在20个到200个指令比较好,时间片太小(1到3个指令)对性能影响较大,而时间片太大(数百万指令)会使多线程达不到其本来的目的,特别是对于具有绘图用户界面的应用程序。
如果本地线程50,即,解释器24的相应实例,在检查步骤136发现其中最后一个被执行的指令的结果是当前执行线程已经变为闲置的了,且此线程在步骤142从相应的活动线程列表56中被移走,这种移动要求对紧挨活动线程列表56中被移动线程之前的线程的指针进行调整。然后相应的本地线程50的列队互斥体52在步骤144被锁定,最近闲置的线程在步骤146被插入到闲置线程列表34中,互斥体52在步骤148被解锁。将一个线程插入到闲置线程列表34中,要对线程(包括被插入的线程以及闲置线程列表34中紧挨着被插入线程之前的线程)的指针进行调整。
如果本地线程50,即,解释器24的相应实例,在检查步骤138发现最后一个被执行的指令的结果是当前执行线程已经终止其任务或工作,且此线程在步骤150从活动列表56中被移走,同时已终止的线程所占用的资源也被释放出来。
在步骤142、144、146、148将线程从活动列表56中移到闲置列表34中之后,或者是在步骤150将已终止的线程从活动列表56中被移走之后,相关的本地线程50的解释器24在步骤152调查在与当前线程处在同一优先组的活动列表56中是否剩有线程,如果是,则解释器24返回到步骤70(如图5A所示)执行维护任务,如果不是,则解释器24或本地线程50在步骤154通过活动列表56来运行,以便确定列表中最高优先级线程的优先级别。在接下来的步骤156和158中,最高优先级线程成为当前线程,并且最高优先级活动列表56中线程的数量也被计算出来。然后解释器24又返回到步骤70执行维护任务。
当在检查步骤136和138确定最后一个字节码指令执行完毕时当前线程没有变为闲置线程或没有终止其任务之后,解释器24在决策结160询问:是否刚执行的指令的结果是当前线程的优先组已经改变。如果不是,则执行检查步骤140以确定时间片是否已经终止;如果是,则解释器24在步骤162询问当前线程的优先组是增加了还是减小了,如果增加了,则最高优先组中的线程数在步骤164重新设定为1,如果减小了,则最高优先组中的线程数在步骤166被减小。解释器24在确定结合168调查是否有活动线程留在高优先组中,如果调查结果为否,则解释器24会在步骤170扫瞄活动线程以确定一个新的最高优先组并计算此组中线程的数量,然后解释器24在步骤172进行上下文转换,同时最高优先级活动线程58变为当前线程;
如果调查或确定结合168结果为真,则解释器24会直接进行上下文转换步骤172以及接下来的读取步骤132和指令执行步骤134。
线程负载平衡
如上所述,可能有多重本地线程50,以及来自连接列表56(活动虚拟线程58的)的各执行指令。当一个虚拟线程变为活动状态并被分配给本地线程50时,系统试图将其分配给具有最轻负载的本地线程,这使得虚拟线程在本地线程之间基本上保持平衡。
当活动线程终止或变为闲置时,在具有两个本地线程的系统上没有必要这样做,每个被分配了10个虚拟线程,很有可能在一个本地线程中的6个虚拟线程都是终止的或闲置的,还有两个本地线程,一个具有4个虚拟线程,而另一个具有10个虚拟线程。
避免本地线程50中负载的不平衡或不均匀是有必要的,因为这样的一个环境不能在多处理器的机器上有效地利用处理器,为了解决这个问题,由解释器24所承担的虚拟线程使用一种被称作“线程平衡”的技术,此线程平衡的基本原则是解释器24应该定期检查运行虚拟线程58的设备并对它们进行重新分配以维持本地线程50中虚拟线程的平衡分配。线程平衡必须仔细进行以避免本地线程50停下来等待被锁定的数据变得可以使用。
任何本地线程50都可能会执行线程平衡,每个本地线程50都包含有一个计数器(没有显示出来),每次本地线程每增加线程已经完成了整套时间片的执行(也就是说,本地线程50达到了活动线程58的列表56中终端,并且又从头开始了。)当计数器达到选定的某一个值时(此选定值符合平台以及所期望的应用程序装置和操作者的喜好),计数器重新设定为0,且本地线程50试图执行线程平衡。
该本地线程50执行线程平衡时,如果另一个本地线程正在执行线程平衡,则此本地线程会跳过平衡操作。在几个本地线程50中线程平衡的协调是通过使用一个全球互斥体(未说明)来完成,为了执行线程平衡,本地线程50必须在此互斥体上加锁。当本地线程50访问此全球互斥体并发现其被锁定时,本地线程不会等待互斥体被解锁,而是跳过线程平衡。
一旦本地线程50在平衡互斥体上加锁,本地线程就必须在此本地线程表格36上重复2次,每个本地线程50维护一个线程负载值(在上文中已有说明,一般是所有活动线程的优先级之和)。在第一次通过本地线程表格期间,执行平衡的线程50会计算所有本地线程的负载值之和,然后,所有本地线程的负载值之和除以本地线程50的总数就得到平均负载;在第二次通过本地线程列表期间,如果任何一个本地线程50的负载高于平均负载,则本地线程的活动列表56会被锁定,,虚拟线程从活动列表中被移走,从低优先级线程开始向高优先级线程移动,直到本地线程的负载小于或等于平均负载。
然后,使用通常的算法,将这些虚拟线程分配给本地线程,就好象是刚被激活一样。(确定具有最轻负载的本地线程,并将虚拟线程分配给它。)
命名的线程
当应用程序执行一个创建新线程的指令时,此应用程序通常会收到刚刚被创建的线程的唯一的标识符,此标识符一般是一个独特的数字代码。(此数字代码在线程被创建时动态分配,当发送一个线程间信息时用来指定目标的地址。)
然而,有时候会希望一个应用程序与另一个正在运行的应用程序进行信息交换,这样的话,动态分配的目标线程的数字ID就不能用来发送信息。
因此推荐解释语言提供一个指令用来分配一个名称给线程,或者是执行创建新线程的指令的部分功能,线程的名称是一串能被唯一用来识别线程的字符。一般,一个应用程序开发者会使用某个对于他们来说是唯一的识别器(如:其发展程序包的序列数),与所说明的应用程序名称(如:“Whiteboard”)结合在一起来确定一个能为应用程序所用的独一无二的线程名称。
当一个应用程序需要发送信息给另一个线程时,可能会通过动态分配给线程的唯一数字ID来进行,如果线程已经被分配有一个名称的话也可能会通过线程名称来进行。
线程消息以及连网
线程间消息是应用程序组件特别是用户界面组件(如:按钮、滚动条)之间进行交流的有效办法,它们通过线程名称形成一个有效的机制来实现在同一台计算机上运行的应用程序之间的交流。
此外,线程信息还能形成一个在不同计算机上的应用之间进行交流的有效办法,如果执行恰当,它将对应用以及应用开发者透明,不管线程信息是否被传送给本地计算机上指定线程或远程计算机上的指定线程,都不会影响需要传送信息的指令的特性。
不同计算机上的应用程序之间的交流是通过使用代理线程174和176(参见图6)来完成,当本地计算机180上的线程178需要与远程计算机184上的线程182进行交流时,本地计算机180上的线程178必须执行一个指令来与远程线程182相连。执行指令时会创建一个新的本地代理线程174,此代理线程174执行一个连接到远程计算机184的代码模块,远程计算机184接受此连接并建立自己的代理线程176,,然后代理线程174和176在网络186(使用标准网络协议,如:TCP/IP。)上进行互相交流。
执行原始连接指令的本地线程178此时接受到本地代理线程174的ID,本地线程178能使用此ID就好象它是远程目标线程182的ID一样,也就是说本地线程178能将本地代理线程174的ID当成在远程线程182上被瞄准的线程间信息的地址来使用。
无论本地代理线程174何时接收信息,它都会用二进制缓冲器(没有表示出来)的形式建立一个此信息的表示法,并将整个网络186上的这种缓冲器(buffer)传送给使用标准协议的远程代理线程176,然后,远程代理线程176将信息的二进制缓冲器表示法译回成标准的信息并将此信息转发给远程线程182。
同一个系统用来向其它方向传送信息,如果远程代理线程176收到此信息,此信息会被翻译并在网络上将其传送给本地代理线程174,本地代理线程174又将其转发给本地线程178。
可以这样理解,在这里提到的处理器模块可能是有线元件(wiredcomponents)或普通计算机电路(此电路通过程序修正来完成一些指定的任务。)。因此,解释器可能由数字电路实现,此电路被软件修正以便将用户源码编译成伪代码,并创建虚拟线程,用来实现任务或工作以及处理根据当前执行虚拟线程选定的伪代码指令,等等。
也可以进一步理解为:在这里对解释器24以及其操作的描述适用于正在运行的任何一个解释器实例,即,不同的本地线程50。
尽管本发明是参照其特定的优选实施例和应用程序,但本领域的技术人员根据此教案,在不脱离或超过由所附权利要求限定的本发明的精神或范围的情况下.相应地,可以理解这里通过例子提供附图和说明书以便利对本发明的理解而不应该理解对其范围的限制。
Claims (45)
1.一种用于操作计算机的方法,该方法包含:
把多个伪码指令,至少一些包含多个机器码指令的所述伪码指令存储在计算机内存中;
对于多个由计算机执行的任务或工作中的每个,都自动产生各个执行上下文数据的虚拟线程,该执行上下文数据包括a)在执行各个任务或工作中将执行的下一个伪码指令的存储位置和(b)用于执行各个任务或工作需要的任何局部变量的值,多个所述任务或工作中的每个都承担包含多个机器语言指令的各个所述伪码指令的执行;
在各个虚拟线程的控制下且在各个系列时间片或处理时隙内处理每个所述任务或工作;和
在不同虚拟线程之间的每个上下文转接中,仅仅在完成当前执行的一个所述伪码指令的执行之后承担如此的上下文转接。
2.根据权利要求1的方法,其中每个虚拟线程是各个虚拟线程的连接列表的一部分,每个虚拟线程还包括指向各个连接列表中的下一个虚拟线程的指针,进一步包括,为在不同虚拟线程之间的每个上下文转接,参考当前执行的虚拟线程的指针以确定将执行的下一个虚拟线程的身份。
3.根据权利要求2的方法,其中所述相应的连接列表是多个所述虚拟线程的连接列表中的一个,在所述连接列表中,一个是闲置虚拟线程的列表,另一个是活动虚拟线程的列表,还有一个是队列虚拟线程的列表。还包含定期将至少一个虚拟线程从所述列队虚拟线程的列表中移到所述活动虚拟线程的列表中。
4.根据权利要求3的方法,其中虚拟线程从所述列队虚拟线程的列表中向所述活动虚拟线程的列表中的移动包括:
设置互斥体以锁定所述列队虚拟线程的列表;
随后,修改指针(i)在已移动的虚拟线程中、(ii)在最初至少一个虚拟线程在所述活动虚拟线程列表中和(iii)在至少一个保留的虚拟线程在所述列队虚拟线程的列表中;和
然后,重新设定或释放互斥体,以便对所述列队虚拟线程的列表进行访问。
5.根据权利要求1的方法,其中每一个所述虚拟线程还包括一个互斥体,进一步包括:
设定所述选定的一个虚拟线程的互斥体;
随后在所述选定的虚拟线程中修改数据;
然后,重新设定或释放互斥体,以便对所述选定的虚拟线程进行访问。
6.根据权利要求5的方法,其中设定所述选定的虚拟线程的所述互斥体,或是修改所述数据,以及在响应来自所述另一个虚拟线程的信息来重新设定或释放所述选定的一个虚拟线程的互斥体。
7.根据权利要求5的方法,其中每个虚拟线程都是虚拟线程相应连接列表的一部分,每个虚拟线程又包括一个指向相应连接列表中的下一个虚拟线程的指针,所述对数据的修改还包括修改所述选定的一个虚拟线程的指针。
8.根据权利要求1的方法,其中每个所述虚拟线程中都被分配了信息队列,进一步包括:在依照另一个选定的虚拟线程执行任务或工作时,在所述选定的一个虚拟线程的信息队列中输入信息。
9.根据权利要求8的方法,其中所述选定的一个虚拟线程以及所述虚拟线程中的所述另一个与来自不同应用程序的相应任务或工作对应,由此,在所述选定的一个虚拟线程的信息队列中输入所述信息来实现不同应用程序之间的数据传递。
10.根据权利要求8的方法,其中所述选定的一个虚拟线程以及所述虚拟线程中的所述另一个是不同计算机上的代理线程或界面线程,在包括所述计算机之间的信息链路上传送所述信息的所述信息队列中输入所述信息。
11.根据权利要求1的方法,其中虚拟线程的创建、在相应的时间片或处理时隙中的所述任务或工作的处理和执行上下文转换都包括在解释器程序下计算机的操作。
12.根据权利要求11的方法,该方法还包括:在计算机上运行多个所述解释程序的实例,每个实例对应一个本地线程,每个本地线程:
创建相应的一套执行上下文数据的虚拟线程;
在各个虚拟线程的控制下处理相应系列时间片或处理时隙中的多个任务或工作;和
不同虚拟线程之间的每一个上下文转换中,执行这种上下文转换只有在当前执行所述伪代码指令中的一个执行完之后。
13.根据权利要求12的方法,还包含:将一个虚拟线程从具有一个比平均值重的负载的第一个本地线程移到具有一个比平均值轻的负载的第二个本地线程中。
14.根据权利要求13的方法,其中虚拟线程的移动包括:
通过将各线程的线程负载值相加然后再除以线程数量来确定所有本地线程的平均负载;和
对于每个本地线程,将各线程的负载值与平均负载值相比以得到相对负载。
15.根据权利要求1的方法,其中所述虚拟线程包括:第一个代理线程通过计算机网络链路与另一台计算机上的第二个代理线程进行交流;与所述另一台计算机的交流包括在所述第一个代理线程的控制之下使用标准网络协议。
16.根据权利要求15的方法,其中每一个所述虚拟线程,包括所述第一个代理线程都被分配了一个相应的信息队列,进一步包括在所述第一个代理线程的信息队列中输入信息用来执行在所述计算机网络链路上另一台计算机的数据转换。
17.根据权利要求1的方法,其中选定的一个处于闲置状态的所述虚拟线程,进一步包括:
产生一个信息以响应来自计算机外部源的输入;
在所述选定的一个虚拟线程的信息队列中插入信息;
将所述选定的一个虚拟线程从所述闲置状态变到活动状态;和
在所述信息队列中插入所述信息并改变所述选定的一个虚拟线程的状态之后,在将一个时间片或处理时隙分配给选定的一个所述虚拟线程期间访问所述信息队列来获取所述信息。
18.根据权利要求1的方法,其中每个所述虚拟线程还包括一个线程优先级,进一步包括:自动根据多个所述虚拟线程中的线程优先级来确定相对优先级,并根据确定的相对优先级改变线程的次序。
19.根据权利要求1的方法,其中在相应虚拟线程的控制之下,在相应一系列时间片或处理时隙中所处理的任务或工作包括:
控制成像于计算机显示器上的对象,每一个所述对象组成一个独立的分配给相应的一个所述虚拟线程的任务或工作;和
监视计算机键盘上按键的活动,每个所述按键组成一个独立的分配给相应的一个所述虚拟线程的任务或工作。
20.根据权利要求1的方法,其中所述时隙或处理时隙通过对连续执行的伪代码指令的计数来测量,进一步包括:对于多个所述时间片或处理时隙中的每一个,在计数预定数量的连续执行伪代码指令时,终止相应的时间片或处理时隙。
21.一种多任务计算机包含:
一存储器;
一显示器;
一输入外围设备;
至少一个与所述存储器、显示器以及输入外围设备动态相连的处理器,此处理器有:
一编译器,其用来将人工输入的源代码(operator entered source code)指令转换为字节码或伪代码指令,此编译器与所述存储器动态相连以便能存储所述字节码或伪代码指令;
用来执行所述字节码或伪代码指令的解释器;和
所述存储器存储闲置虚拟线程的第一连接列表,活动虚拟线程的第二连接列表,以及列队或等待的虚拟线程的第三个连接列表。每个所述线程包括:上下文或状态数据、一个互斥体以及一个指向相应列表中下一个线程的指针。所述解释器与所述输入外围设备动态相连,用来识别由所述输入外围设备产生的事件,所述解释器与所述存储器动态相连以用来(a)将至少一个所述闲置虚拟线程从所述第一个连接列表移到所述第三个连接列表,(b)将列队或等待的虚拟线程从所述第三个连接列表移到所述第二个连接列表,(c)在连续的时间片或处理时隙中依照预定的优先级安排,根据所述第二个连接列表中不同虚拟线程的上下文以及状态数据执行指令。所述解释器与所述显示器部分动态相连用于以响应所述第二个连接列表中相应的活动虚拟线程所指定的指令来修正所述显示器上的对象。
22.根据权利要求21的计算机,其中:
所述存储器另外存储本地线程的第四连接列表:
所述解释器是多个共同解释器的实例之一,所述共同解释器的所述实例的每个与各自的所述本地线程相对应;
所述第二连接列表是多个连接本地线程列表中的一个,每个所述本地线程被通过指向各自所述连接本地线程列表的各个指针所连接;和
所述第三连接列表是多个连接队列线程列表中的一个,每个所述本地线程被通过指向各自所述连接队列线程列表的各个指针所连接。
23.根据权利要求22的计算机,其中所述活动线程每个都包括用于使能由一个本地线程锁定的各个线程的互斥体,以防止其它本地线程对各个线程的访问。
24.根据权利要求22的方法,其中所述解释器包括把虚拟线程从具有比平均值重的负载的第一本地线程移动到具有比平均值轻的负载的第二本地线程的装置。
25.根据权利要求21的计算机,其中所述闲置虚拟线程的列表包括多个分配给键盘上各按键的线程,用来处理各按键的活动。
26.根据权利要求21的计算机,其中所述闲置虚拟线程的列表包括多个分配给显示图像中的各个对象的线程,用来处理各对象的外观修正。
27.根据权利要求21的计算机,其中所述解释器包括一个上下文转换模块以及一个指令计数器,所述上下文转换模块与所述存储器以及指令计数器动态相连,用于在依照所述当前执行活动线程执行预定数量的字节码或伪代码指令时,实现从所述第二个连接列表的当前执行活动线程到所述第二个连接列表中的下一个活动线程的上下文转换。
28.根据权利要求21的计算机,其中每个所述虚拟线程包括各线程中要执行的下一个指令的存储位置,各线程的任何一个局部变量值,以及各线程执行的优先级别。
29.根据权利要求21的计算机,其中所述存储器存储了多个分配给所述各线程的信息队列。
30.根据权利要求21的计算机,其中所述存储器存储了至少一个具有用来通过通信链路实现与远程计算机之间的交流的执行上下文的代理线程或界面线程,此代理线程或界面线程包含一个通向网络协议例行程序的存储地址。
31.在一种具有用来执行一系列字节码指令,且每个字节码指令包含多个的机器码步骤的解释器的计算机中,多任务方法包含:
对于由计算机完成的任务中的每一个来说,使用解释器定义一个相应的虚拟线程;
在一系列连续时间片中的每一个时间片里,执行从虚拟线程中选定的各当前线程的字节码指令;
在执行完所述一个字节码指令之后,执行一个从所述虚拟线程到所述另一个虚拟线程的上下文转换。
32.根据权利要求31的方法,其中每个所述虚拟线程都是虚拟线程相应连接列表的一部分,每个虚拟线程还包括一个指向相应连接列表中下一个虚拟线程的指针,还包含:对于不同虚拟线程之间的上下文转换,参考当前执行虚拟线程的指针来确定要执行的下一个虚拟线程的身份。
33.根据权利要求32的方法,其中相应的连接列表都是多个所述虚拟线程连接列表中的一个,所述连接列表中,一个是闲置虚拟线程的一个列表,另一个是活动虚拟线程的一个列表,还有一个是列队虚拟线程的一个列表,还包含:周期地将至少一个虚拟线程从列队虚拟线程的列表移到活动虚拟线程的列表中。
34.根据权利要求33的方法,其中将一个虚拟线程从列队虚拟线程的所述列表向活动虚拟线程的所述列表的移动包括:
设定互斥体锁定列队虚拟线程的所述列表;
随后,修正指针(i)在已移动的虚拟线程中、(ii)在最初至少一个虚拟线程在所述活动虚拟线程列表中和(iii)在至少一个虚拟线程保留在所述列队虚拟线程列表中;和
然后,重新设定或重新释放互斥体以使得能对所述列队虚拟线程的列表进行访问。
35.根据权利要求31的方法,其中每个所述虚拟线程还包括一个互斥体,进一步包括:
设定所述选定的一个虚拟线程的互斥体;
随后,修正所述选定的一个虚拟线程中的数据;
然后,重新设定或释放互斥体以使得能对所述选定的一个虚拟线程进行访问。
36.根据权利要求35的方法,其中设定所述选定的一个虚拟线程的所述互斥体、修正所述数据以及重新设定或释放所述选定的一个虚拟线程的所述互斥体,以响应一个来自其它所述虚拟线程的信息执行所述三项。
37.根据权利要求31的方法,其中每一个所述虚拟线程被分配一个信息队列,进一步包括:在依照所述虚拟线程中的另一个执行任务或工作时,在所述选定的一个虚拟线程的信息队列中输入信息。
38.根据权利要求31的方法,其中所述虚拟线程包括第一个代理线程,此代理线程用来通过通信链路与另一台计算机上第二个代理线程进行通信,进一步包括:根据用来在所述通信链路上将一个信息传送给所述第二个代理线程的所述第一个代理线程的处理字节码指令。
39.根据权利要求31的方法,其中每一个所述虚拟线程还包括线程优先级别,进一步包括在多个所述虚拟线程中自动参考线程优先级别来确定相对优先级别,并且根据确定的相对优先级别改变线程的次序。
40.根据权利要求31的方法,其中所述时间片或处理时隙通过计算连续执行的伪代码指令来测量,进一步包括:对于多个所述时间片或处理时隙的每一个来说,在计算连续执行的伪代码指令的预定数量时,终止相应的时间片或处理时隙。
41.一种多任务计算机包括:
一存储器,用来存储多线程或多任务的状态或上下文数据;
一解释器,用来执行一系列每一个字节码指令包含多个机器码步骤的字节码指令,解释器将被编程为:
由计算机完成为每个任务定义的一个相应的虚拟线程;
在一系列连续时间片的每一个时间片中,执行相应的从虚拟线程中选定的当前线程的字节码指令;和
仅仅当执行完一个所述字节码指令之后,执行从一个所述虚拟线程到另一个所述虚拟线程的上下文转换。
42.根据权利要求41的计算机,其中每一个所述虚拟线程都是相应的虚拟线程连接列表的一部分,每一个虚拟线程还包括指向相应连接列表中下一个虚拟线程的指针。所述解释器进而被编程以参考当前执行虚拟线程的指针来确定要执行的下一个虚拟线程的身份。
43.根据权利要求42的计算机,其中所述相应连接列表是多个所述虚拟线程连接列表的一个,所述连接列表中的一个是闲置虚拟线程的列表,另一个是活动虚拟线程的列表,还有一个是列队虚拟线程的列表。所述解释器进而被编程以定期将至少一个虚拟线程从所述列队虚拟线程的列表中移到所述活动虚拟线程的列表中。
44.一种计算机方法包含:
运行计算机的定时器以产生一系列时间片或处理时隙;
将输入用户源码编译成字节码或伪代码的指令,而每一个字节码或伪代码的指令都与多个的机器码指令对应;
运行所述计算机的解释器来将计算任务分配给相应的虚拟线程,将所述计算任务分配给相应的虚拟线程包括识别和存储每个所述计算任务的状态和上下文数据;
在每一个所述时间片中,依照所述一个当前虚拟线程的状态和上下文数据,所述解释器运行还用来执行选定的一个字节码或伪代码的指令;
只有当执行完选定的字节码或伪代码的指令中的每一个连续指令之后,进而运行所述解释器以检查自从依照所述当前虚拟线程中的一个开始执行指令之后,预定的时间间隔是否已经消逝;和
在确定所述预定的时间间隔已经消逝时,运行所述解释器来执行上下文转换。
45.根据权利要求44的方法,其中分配给所述相应的虚拟程序线程的任务包括:(a)控制在显示屏上成像的对象,(b)监视操作者的输入,(c)执行应用程序的例行程序,(d)运行计算机维护例行程序,(e)通过计算机网络实现与远程计算机之间的通信,和(f)计算局部变量。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/721,695 | 2000-11-24 | ||
US09/721,695 US7234139B1 (en) | 2000-11-24 | 2000-11-24 | Computer multi-tasking via virtual threading using an interpreter |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1592886A true CN1592886A (zh) | 2005-03-09 |
CN1316357C CN1316357C (zh) | 2007-05-16 |
Family
ID=24898939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB018218555A Expired - Fee Related CN1316357C (zh) | 2000-11-24 | 2001-10-26 | 通过虚拟线程执行计算机多任务的方法及装置 |
Country Status (11)
Country | Link |
---|---|
US (1) | US7234139B1 (zh) |
EP (1) | EP1364284A4 (zh) |
JP (1) | JP4213582B2 (zh) |
CN (1) | CN1316357C (zh) |
AU (1) | AU2001297946B2 (zh) |
CA (1) | CA2429966A1 (zh) |
IL (2) | IL156075A0 (zh) |
MX (1) | MXPA03004581A (zh) |
NZ (1) | NZ526626A (zh) |
RU (1) | RU2286595C2 (zh) |
WO (1) | WO2003007105A2 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101098527B (zh) * | 2006-06-27 | 2012-06-13 | 雅斯拓(北京)智能卡科技有限公司 | 同时处理个人令牌中的数据传输会话的线程控制器 |
CN102567111A (zh) * | 2011-12-23 | 2012-07-11 | 深圳市融创天下科技股份有限公司 | 一种异步过程调用的方法、系统和终端设备 |
CN103176848A (zh) * | 2011-11-08 | 2013-06-26 | 辉达公司 | 计算工作分布参考计数器 |
CN103731356A (zh) * | 2013-12-09 | 2014-04-16 | 福建星网锐捷网络有限公司 | 报文处理方法及装置 |
CN107678701A (zh) * | 2017-06-12 | 2018-02-09 | 平安科技(深圳)有限公司 | 单证打印的装置、方法及计算机可读存储介质 |
CN108446147A (zh) * | 2018-03-23 | 2018-08-24 | 携程旅游网络技术(上海)有限公司 | 移动终端的多线程计算方法及系统 |
CN111324438A (zh) * | 2020-02-18 | 2020-06-23 | 北京嘀嘀无限科技发展有限公司 | 请求的调度方法、装置、存储介质及电子设备 |
Families Citing this family (62)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6824064B2 (en) | 2000-12-06 | 2004-11-30 | Mobile-Mind, Inc. | Concurrent communication with multiple applications on a smart card |
US7461148B1 (en) * | 2001-02-16 | 2008-12-02 | Swsoft Holdings, Ltd. | Virtual private server with isolation of system components |
US20050108711A1 (en) * | 2003-11-13 | 2005-05-19 | Infineon Technologies North America Corporation | Machine instruction for enhanced control of multiple virtual processor systems |
US9098340B2 (en) * | 2003-12-08 | 2015-08-04 | Teradata Us, Inc. | Virtual regulator for a database system |
US20050251804A1 (en) * | 2004-05-04 | 2005-11-10 | International Business Machines Corporation | Method, data processing system, and computer program product for detecting shared resource usage violations |
US7617497B1 (en) * | 2004-08-30 | 2009-11-10 | Sun Microsystems, Inc. | Method and system for creating and using storage threads |
US20060235927A1 (en) * | 2005-04-19 | 2006-10-19 | Bhakta Dharmesh N | System and method for synchronizing distributed data streams for automating real-time navigation through presentation slides |
US7730491B2 (en) * | 2005-08-30 | 2010-06-01 | Intel Corporation | Fair scalable reader-writer mutual exclusion |
RU2312388C2 (ru) * | 2005-09-22 | 2007-12-10 | Андрей Игоревич Ефимов | Способ организации многопроцессорной эвм |
JP4557949B2 (ja) * | 2006-04-10 | 2010-10-06 | 富士通株式会社 | 資源ブローカリングプログラム、該プログラムを記録した記録媒体、資源ブローカリング装置、および資源ブローカリング方法 |
RU2320002C2 (ru) * | 2006-04-18 | 2008-03-20 | Общество с ограниченной ответственностью "Юникор микросистемы" | Способ переключения контекста задач и процедур в процессоре |
CA2654423A1 (en) * | 2006-06-19 | 2007-12-27 | Diskeeper Corporation | Computer micro-jobs |
US7975272B2 (en) | 2006-12-30 | 2011-07-05 | Intel Corporation | Thread queuing method and apparatus |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US8024731B1 (en) * | 2007-04-25 | 2011-09-20 | Apple Inc. | Assigning priorities to threads of execution |
US20080313647A1 (en) * | 2007-06-18 | 2008-12-18 | Microsoft Corporation | Thread virtualization techniques |
JPWO2009022371A1 (ja) | 2007-08-16 | 2010-11-04 | ネットクリアスシステムズ株式会社 | タスク処理装置 |
US20090100435A1 (en) * | 2007-10-11 | 2009-04-16 | Microsoft Corporation | Hierarchical reservation resource scheduling infrastructure |
US8539485B2 (en) * | 2007-11-20 | 2013-09-17 | Freescale Semiconductor, Inc. | Polling using reservation mechanism |
WO2009101563A1 (en) * | 2008-02-11 | 2009-08-20 | Nxp B.V. | Multiprocessing implementing a plurality of virtual processors |
US8561072B2 (en) * | 2008-05-16 | 2013-10-15 | Microsoft Corporation | Scheduling collections in a scheduler |
US8650570B2 (en) * | 2008-06-02 | 2014-02-11 | Microsoft Corporation | Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources |
US9417914B2 (en) * | 2008-06-02 | 2016-08-16 | Microsoft Technology Licensing, Llc | Regaining control of a processing resource that executes an external execution context |
US8312230B2 (en) | 2008-06-06 | 2012-11-13 | International Business Machines Corporation | Dynamic control of partition memory affinity in a shared memory partition data processing system |
US9027027B2 (en) * | 2008-06-09 | 2015-05-05 | Microsoft Technology Licensing, Llc | Thread management based on device power state |
US7921195B2 (en) * | 2008-06-09 | 2011-04-05 | International Business Machines Corporation | Optimizing service processing based on business information, operational intelligence, and self-learning |
JP5330384B2 (ja) * | 2008-06-25 | 2013-10-30 | パナソニック株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
US8266394B2 (en) * | 2008-07-14 | 2012-09-11 | International Business Machines Corporation | Methods for single-owner multi-consumer work queues for repeatable tasks |
DE102009055752A1 (de) * | 2009-11-25 | 2011-05-26 | Robert Bosch Gmbh | Verfahren zum Ermöglichen einer sequentiellen, nicht blockierenden Abarbeitung von Anweisungen in nebenläufigen Tasks in einer Steuereinrichtung |
TWI486966B (zh) * | 2010-02-04 | 2015-06-01 | Phison Electronics Corp | 快閃記憶體儲存裝置、其控制器與寫入管理方法 |
CN101976208B (zh) * | 2010-10-25 | 2014-08-13 | 中兴通讯股份有限公司 | 信息投递的方法和装置 |
FR2969787B1 (fr) * | 2010-12-24 | 2013-01-18 | Morpho | Protection des applets |
US9218186B2 (en) * | 2011-09-01 | 2015-12-22 | International Business Machines Corporation | Software compiler generated threaded environment |
FR2984554B1 (fr) * | 2011-12-16 | 2016-08-12 | Sagemcom Broadband Sas | Bus logiciel |
US9110878B2 (en) * | 2012-01-18 | 2015-08-18 | International Business Machines Corporation | Use of a warning track interruption facility by a program |
US9104508B2 (en) * | 2012-01-18 | 2015-08-11 | International Business Machines Corporation | Providing by one program to another program access to a warning track facility |
US9274819B2 (en) * | 2013-03-19 | 2016-03-01 | Hewlett Packard Enterprise Development Lp | Performing garbage collection using a virtual thread in operating system without kernel thread support |
RU2598988C2 (ru) * | 2013-08-07 | 2016-10-10 | Фиизер Инк. | Способы и системы для поиска прикладных программ |
CN103701709B (zh) * | 2013-12-13 | 2015-07-01 | 北京京东尚科信息技术有限公司 | 一种流量控制方法及系统 |
FR3015067B1 (fr) * | 2013-12-18 | 2017-03-17 | Krono Safe | Procede de composition et d'execution d'un plan de sequencement de taches temps-reel |
US9645980B1 (en) | 2014-03-19 | 2017-05-09 | Google Inc. | Verification of native applications for indexing |
US9921848B2 (en) * | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9354883B2 (en) * | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US9772867B2 (en) * | 2014-03-27 | 2017-09-26 | International Business Machines Corporation | Control area for managing multiple threads in a computer |
US9524347B1 (en) | 2014-04-01 | 2016-12-20 | Google Inc. | Automatically implementing an application in response to a search query |
US9513961B1 (en) * | 2014-04-02 | 2016-12-06 | Google Inc. | Monitoring application loading |
US9348646B1 (en) * | 2014-09-22 | 2016-05-24 | Amazon Technologies, Inc. | Reboot-initiated virtual machine instance migration |
US9552223B2 (en) * | 2014-09-30 | 2017-01-24 | International Business Machines Corporation | Post-return asynchronous code execution |
US9367344B2 (en) * | 2014-10-08 | 2016-06-14 | Cisco Technology, Inc. | Optimized assignments and/or generation virtual machine for reducer tasks |
US9684546B2 (en) * | 2014-12-16 | 2017-06-20 | Microsoft Technology Licensing, Llc | Job scheduling and monitoring in a distributed computing environment |
CN104598563B (zh) * | 2015-01-08 | 2018-09-04 | 北京京东尚科信息技术有限公司 | 高并发数据存储方法及装置 |
US10248463B2 (en) * | 2015-02-13 | 2019-04-02 | Honeywell International Inc. | Apparatus and method for managing a plurality of threads in an operating system |
JP6447217B2 (ja) * | 2015-02-17 | 2019-01-09 | 富士通株式会社 | 実行情報通知プログラム、情報処理装置および情報処理システム |
US10073714B2 (en) | 2015-03-11 | 2018-09-11 | Western Digital Technologies, Inc. | Task queues |
US9846589B2 (en) | 2015-06-04 | 2017-12-19 | Cisco Technology, Inc. | Virtual machine placement optimization with generalized organizational scenarios |
US10069949B2 (en) | 2016-10-14 | 2018-09-04 | Honeywell International Inc. | System and method for enabling detection of messages having previously transited network devices in support of loop detection |
US11150943B2 (en) * | 2017-04-10 | 2021-10-19 | Intel Corporation | Enabling a single context hardware system to operate as a multi-context system |
US10459751B2 (en) * | 2017-06-30 | 2019-10-29 | ATI Technologies ULC. | Varying firmware for virtualized device |
US10810086B2 (en) | 2017-10-19 | 2020-10-20 | Honeywell International Inc. | System and method for emulation of enhanced application module redundancy (EAM-R) |
US10783026B2 (en) | 2018-02-15 | 2020-09-22 | Honeywell International Inc. | Apparatus and method for detecting network problems on redundant token bus control network using traffic sensor |
IL279479B2 (en) * | 2018-07-02 | 2024-09-01 | Drivenets Ltd | A system that implements multi-process uses |
US11210816B1 (en) * | 2018-08-28 | 2021-12-28 | Apple Inc. | Transitional effects in real-time rendering applications |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4744048A (en) * | 1985-10-09 | 1988-05-10 | American Telephone And Telegraph Company | Display context switching arrangement |
US6226789B1 (en) | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US6766515B1 (en) * | 1997-02-18 | 2004-07-20 | Silicon Graphics, Inc. | Distributed scheduling of parallel jobs with no kernel-to-kernel communication |
US6269391B1 (en) | 1997-02-24 | 2001-07-31 | Novell, Inc. | Multi-processor scheduling kernel |
US5907702A (en) * | 1997-03-28 | 1999-05-25 | International Business Machines Corporation | Method and apparatus for decreasing thread switch latency in a multithread processor |
US6240440B1 (en) | 1997-06-30 | 2001-05-29 | Sun Microsystems Incorporated | Method and apparatus for implementing virtual threads |
US6233599B1 (en) * | 1997-07-10 | 2001-05-15 | International Business Machines Corporation | Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers |
US6282701B1 (en) | 1997-07-31 | 2001-08-28 | Mutek Solutions, Ltd. | System and method for monitoring and analyzing the execution of computer programs |
US6260150B1 (en) * | 1998-03-10 | 2001-07-10 | Agere Systems Guardian Corp. | Foreground and background context controller setting processor to power saving mode when all contexts are inactive |
US6141732A (en) | 1998-03-24 | 2000-10-31 | Novell, Inc. | Burst-loading of instructions into processor cache by execution of linked jump instructions embedded in cache line size blocks |
US6289446B1 (en) | 1998-09-29 | 2001-09-11 | Axis Ab | Exception handling utilizing call instruction with context information |
-
2000
- 2000-11-24 US US09/721,695 patent/US7234139B1/en not_active Expired - Fee Related
-
2001
- 2001-10-26 WO PCT/US2001/051441 patent/WO2003007105A2/en active IP Right Grant
- 2001-10-26 EP EP01274262A patent/EP1364284A4/en not_active Withdrawn
- 2001-10-26 AU AU2001297946A patent/AU2001297946B2/en not_active Expired - Fee Related
- 2001-10-26 IL IL15607501A patent/IL156075A0/xx active IP Right Grant
- 2001-10-26 JP JP2003512804A patent/JP4213582B2/ja not_active Expired - Fee Related
- 2001-10-26 NZ NZ526626A patent/NZ526626A/xx unknown
- 2001-10-26 CA CA002429966A patent/CA2429966A1/en not_active Abandoned
- 2001-10-26 MX MXPA03004581A patent/MXPA03004581A/es active IP Right Grant
- 2001-10-26 CN CNB018218555A patent/CN1316357C/zh not_active Expired - Fee Related
- 2001-10-26 RU RU2003118641/09A patent/RU2286595C2/ru active
-
2003
- 2003-05-22 IL IL156075A patent/IL156075A/en not_active IP Right Cessation
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101098527B (zh) * | 2006-06-27 | 2012-06-13 | 雅斯拓(北京)智能卡科技有限公司 | 同时处理个人令牌中的数据传输会话的线程控制器 |
US8863135B2 (en) | 2006-06-27 | 2014-10-14 | Gemalto Sa | Preemptive smart card access and data transfer based on application priority |
CN103176848A (zh) * | 2011-11-08 | 2013-06-26 | 辉达公司 | 计算工作分布参考计数器 |
CN102567111A (zh) * | 2011-12-23 | 2012-07-11 | 深圳市融创天下科技股份有限公司 | 一种异步过程调用的方法、系统和终端设备 |
CN102567111B (zh) * | 2011-12-23 | 2017-10-27 | 融创天下(上海)科技发展有限公司 | 一种异步过程调用的方法、系统和终端设备 |
CN103731356A (zh) * | 2013-12-09 | 2014-04-16 | 福建星网锐捷网络有限公司 | 报文处理方法及装置 |
CN103731356B (zh) * | 2013-12-09 | 2017-05-24 | 福建星网锐捷网络有限公司 | 报文处理方法及装置 |
CN107678701A (zh) * | 2017-06-12 | 2018-02-09 | 平安科技(深圳)有限公司 | 单证打印的装置、方法及计算机可读存储介质 |
CN108446147A (zh) * | 2018-03-23 | 2018-08-24 | 携程旅游网络技术(上海)有限公司 | 移动终端的多线程计算方法及系统 |
CN111324438A (zh) * | 2020-02-18 | 2020-06-23 | 北京嘀嘀无限科技发展有限公司 | 请求的调度方法、装置、存储介质及电子设备 |
CN111324438B (zh) * | 2020-02-18 | 2023-09-19 | 北京嘀嘀无限科技发展有限公司 | 请求的调度方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
EP1364284A4 (en) | 2007-07-11 |
NZ526626A (en) | 2004-12-24 |
MXPA03004581A (es) | 2004-05-05 |
AU2001297946B2 (en) | 2006-11-30 |
WO2003007105A2 (en) | 2003-01-23 |
US7234139B1 (en) | 2007-06-19 |
JP2004522234A (ja) | 2004-07-22 |
IL156075A0 (en) | 2003-12-23 |
CA2429966A1 (en) | 2003-01-23 |
IL156075A (en) | 2008-06-05 |
EP1364284A2 (en) | 2003-11-26 |
JP4213582B2 (ja) | 2009-01-21 |
RU2286595C2 (ru) | 2006-10-27 |
WO2003007105A3 (en) | 2003-09-12 |
CN1316357C (zh) | 2007-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1592886A (zh) | 通过虚拟线程执行计算机多任务的方法及装置 | |
US10810051B1 (en) | Autoscaling using file access or cache usage for cluster machines | |
CN108090731B (zh) | 一种信息处理方法及设备 | |
CN1277207C (zh) | 使用基于时间的断点调试计算机程序的方法和系统 | |
CN1264078A (zh) | 执行多个操作系统的计算机 | |
JP4712876B2 (ja) | 並列プロセッサ方法と装置 | |
TW406242B (en) | System and method for maximizing usage of computer resources in scheduling of application tasks | |
Tumanov et al. | alsched: Algebraic scheduling of mixed workloads in heterogeneous clouds | |
CN101069161A (zh) | 调度方法、调度装置和多处理器系统 | |
CN1097798C (zh) | 资源分配的方法和系统 | |
AU2001297946A1 (en) | Computer multi-tasking via virtual threading | |
JP2011070256A (ja) | デバッガおよびプログラム | |
CN1873690A (zh) | 图像处理设备、方法和存储有程序的存储介质 | |
CN1873689A (zh) | 图像处理设备、方法和存储有程序的存储介质 | |
CN1177772A (zh) | 独立处理多个指令流、软式控制各指令流的处理功能的多程序流程同时处理器 | |
CN1993674A (zh) | 多芯架构中的资源管理 | |
CN105378668B (zh) | 多处理器系统中的操作系统管理的中断引导 | |
CN1873692A (zh) | 图像处理装置、方法以及存储程序的存储介质 | |
CN103366338A (zh) | 图像处理装置和图像处理方法 | |
JP2009510614A (ja) | セルプロセッサ方法と装置 | |
CN1975676A (zh) | 多节点计算机系统和用于监视其性能的方法 | |
CN1469254A (zh) | 处理器装置、使用它的信息处理装置、编译装置及其方法 | |
CN1873691A (zh) | 图像处理装置、方法以及存储程序的存储介质 | |
CN1873686A (zh) | 图像处理装置、方法以及存储程序的存储介质 | |
CN111178791A (zh) | 一种任务动态均衡分派方法、系统、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070516 Termination date: 20091126 |