若要使所有这些线程都能运行,操作系统就要为每个线程安排一定的C P U 时间。它通过以一种循环方式为线程提供时间片(称为量程),造成一种 假象,仿佛所有线程都是同时运行的一样。图4 - 1显示了在单个CPU的计算机上是如何实现这种运行方式的。如果计算机拥有多个CPU ,那么操作系统就要使用复杂得多的算法来实现CPU上线程负载的平衡。
Windows 2000: Micorsoft Windows 2000能够在拥有多个CPU 的计算机上运行。Windows 2000可以在每个CPU上运行不同的线程,这样,多个线程就真的在同时运行了。Windows 2000的内核能够在这种类型的系统上进行所有线程的管理和调度。不必在代码中进行任何特定的设置就能利用多处理器提供的各种优点。
Windows 98: Windows 98 只能在单处理器计算机上运行。即使计算机配有多个处理器,Windows每次只能安排一个线程运行,而其他的处理器则处于空闲状态。
通常情况下,一个应用程序拥有一个用户界面线程,用于创建所有窗口,并且有一个G e t M e s s a g e循环。进程中的所有其他线程都是工作线程,它们与计算机或I / O相关联,但是这些线程从不创建窗口。另外,一个用户界面线程通常拥有比工作线程更高的优先级,因此用户界面负责向用户作出响应。
虽然单个进程拥有多个用户界面线程的情况并不多见,但是这种情况有着某种有效的用途。Windows Explorer为每个文件夹窗口创建了一个独立的线程。它使你能够将文件从一个文件夹拷贝到另一个文件夹,并且仍然可以查看你的系统上的其他文件夹。另外,如果E x p l o r e r中存在一个错误,那么负责处理文件夹的线程可能崩溃,但是仍然能够对其他文件夹进行操作,至少在执行的操作导致其他文件夹也崩溃之前,仍然可以对它们进行操作(关于线程和用户界面的详细说明,参见第2 6和2 7章)。