用户级和内核级线程之间的一个区别在于它们是如何调度的。在实现多对一(第4.3.1节)和多对多(第4.3.3节)模型的系统上,线程库调度用户级线程在可用的LWP上运行。此方案称为进程竞争范围[process-contention scop](PCS),因为对CPU的竞争发生在属于同一进程的线程之间。(当我们说线程库将用户级线程调度到可用的LWPs中时,我们并不意味着线程实际上在CPU上运行。这需要操作系统将内核线程调度到物理CPU上)。为了决定将哪个内核级别的线程调度到一个CPU上,内核使用了 系统竞争范围[system-contention scope] ( SCS )。使用SCS调度对CPU的竞争发生在系统上的所有线程中。使用一对一模型(第4.3.2节)的系统,如Windows、Linux和Solaris,只使用SCS来调度线程。

一般来说,PCS是按优先级完成的——调度器选择运行最高优先级的可运行线程。用户级线程优先级由程序员设置,而线程库不能对优先级更改,尽管一些线程库可能允许程序员更改线程的优先级。需要注意的是,PCS通常会抢占当前正在运行的线程,给那些优先级更高的线程;但是,在同等优先的线程中,没有时间切片(6.3.4节)的保证。

results matching ""

    No results matching ""