6.4.2 调度和线程竞争范围

2013-10-07 12:59:23 · 作者: · 浏览: 89

6.4.2  调度和线程竞争范围

线程有两种竞争范围:

进程竞争

系统竞争

有着进程竞争范围的线程与相同进程的其他线程进行竞争。这些是混合线程(用户级和内核级线程),系统将创建内核级线程池,用户级线程将映射到它们。这些内核级线程是非绑定(unbound)的,可以映射到一个线程或多个线程。然后内核根据调度属性将内核线程调度到处理器上。

有着系统竞争范围的线程同系统范围内进程的线程进行竞争。这个模型由每个内核级线程对应一个用户级线程组成。用户线程在线程的生命期内都绑定到内核级线程上。内核线程单独负责在一个或多个处理器上调度线程执行。这个模型使用线程的调度属性,根据系统中所有线程来进行线程调度。线程的默认竞争范围根据实现定义。例如,对于Solaris 10,默认竞争范围是进程,但是对于SuSe Linux 2.6.13,默认竞争范围是系统范围。事实上,对于SuSe Linux 2.6.13,根本不支持进程竞争范围。

图6-3显示了进程和系统两种线程竞争范围的区别。在有8个内核的多核环境中,有两个进程。进程A有4个线程,进程B有两个线程。进程A的4个线程中的3个线程竞争范围为进程范围,一个线程的竞争范围为系统范围。进程B的两个线程中,一个线程竞争范围为进程范围,一个线程的竞争范围为系统范围。进程A中有着进程范围的线程竞争内核0和1,进程B中有着进程范围的线程将使用内核2。进程A和B中系统范围的线程竞争内核4和5。有着进程范围的线程映射到线程池。进程A的线程池中有3个内核级线程,进程B的线程池中有两个内核级线程。

 
(点击查看大图)图6-3
竞争范围可以对应用程序的性能产生潜在影响。进程调度模型潜在地为做出调度决策提供较低的开销,因为只需要对一个进程中的线程进行调度。