多任务处理:合作的和有优先权的
你能使用的多任务处理有两种基本方法:合作的,在这种方法中,正在运行的过程必须为其他过程留出CPU时间片;有优先权的,在这种方法中,操作系统决定哪个程序获得时间片。Microsoft Windows 3.x和Macintosh用的都是合作的多任务处理,而OS/2,Windows 95,Windows NT,UNIX,和Amiga操作系统使用的是有优先权的多任务处理。
合作的多任务处理
如果使用合作的多任务处理,每个程序必须允许其他程序使用CPU。使用合作的多任务处理系统的应用软件都有一个特殊的码环,这个码环产生控制允许其他应用软件的运行。如果每个人都按规则办事,这种方法会工作得相当好,但是当应用程序不服从这一规则时,他“霸占”CPU。这意味着,终端用户不能转向其他应用程序,使操作系统或应用程序出现“挂起”。
有优先权的多任务处理
在有优先权的多任务处理中,操作系统安排CPU时间,一个应用软件在任何时候都有可能被操作系统暂停(先占)。这减轻了“一玩到底”的程序问题,因为操作系统负责分给每个应用软件自己的时间片。
Windows 95对于32位Windows应用程序采用有优先权的多任务处理,为了能够向下兼容,对于16位的Windows应用程序(为Windows 3.x写的应用程序)仍采用合作的多任务处理。
线程
线程是一个能独立于程序的其他部分运行的作业。线程属于一个过程,获得自己的CPU时间片。基于WIN32的应用程序可以使用多个可执行的线程,称为多线程。Windows 3.x不能提供一种机制天然地支持多线程应用程序,但是一些为Windows 3.x编写应用程序的公司使用他们自己的线程安排。
基于WIN32的应用软件能在给定的过程中产生多个线程。依靠生成多个线程,应用程序能够完成一些后台操作,例如计算,这样程序就能运行得更快。当线程运行时,用户仍能继续影响程序。正如前面谈到的,当一个应用程序运行时,就产生了一个相应的过程。那么应用程序就能有一个单独的线程等待键盘输入或执行一个操作,例如脱机打印或计算电子表格中各项的总数。
在网络世界中,当你试图调整你站点的服务器的性能时,就要运行线程。如果你使用的是IIS,你可以在服务器上设置对于每个处理器所能创建的线程的最大数目。这样,就能在处理器间更均匀地分配工作,从而加速你的站点。
线程模式
现在,为了让你知道线程是什么和在哪能使用他们,让我们看一下使用线程时你可能要运行的应用程序:ActiveX组件。ActiveX组件是独立于其他代码运行,基于COM的代码。这听起来是不是很熟悉?当你使用ActiveX组件时,必须在操作系统中注册。其中的一条注册信息就是,这个ActiveX组件是否支持多个线程,如果支持怎样支持。这就是线程模式。
组件支持的基本线程模式有:单线程,单元线程,组合线程。下面几个部分将谈谈每一种模式对组件来说意味着什么。
单线程
如果组件被标记(即注册)为单线程组件,这就意味着所有可执行函数(称作方法)都将在组件的一个共享线程中运行。这就类似于没有生成独立的可执行线程的应用程序。单线程组件的缺点是一次只能运行一个方法。如果多次调用组件,例如调用组件中的存储方法,就会产生瓶颈,因为一次只能有一个调用。
如果你正在创建或使用一个ActiveX组件,建议不要使用单线程组件。