了解线程的优先级
控制线程行为的一个属性是它的优先级。.NET运行时环境基于它们的优先级执行线程。CPU一次仅执行一个线程。因此,处于执行的可运行状态的线程,排队等待轮到被处理器执行。线程是固定优先级调度的。带有优先级的每个线程在处理器的线程队列中有自己的位置。
定义线程优先级
线程优先级是指定一个线程优先级相对于另一个线程优先级的属性。多个线程的执行在单个处理器上以特定的顺序被调度。线程优先级可以定义为:
- 高于常规
- 低于常规
- 最高
- 最低
- 正常
较高优先级的线程在较低优先级的线程之前。如果C#遇到了另一个优先级更高的线程,会推后当前线程并执行较高优先级的线程。
当许多线程准备执行的时候,.NET运行时系统选择优先级最高的可运行线程执行。如果高优先级的线程停止或变得不可运行的时候,下一个较低优先级的线程开始执行。如果线程等待一个I/O操作,它在队列中被其他线程推后。在另一个较高优先级线程上调用Sleep()方法结束时,队列中的线程还可以被推后。
小问题:
说明下面的语句正确还是错误
多个线程的执行在单处理器上以特定的顺序被调度。
a.正确
b.错误
答案:
a.正确
设置线程优先级
可以在创建了线程之后使用Thread类的Priority属性设置线程优先级。以下代码段设置线程的优先级:
NewThread.Priority = ThreadPriority.Highest ;
在上述代码中,ThreadProiority.Highest属性指定新线程的优先级设置。线程基于它们的优先级被调度执行。尽管线程在运行时被执行,但是所有的线程都由操作系统指定处理器时间片。确定线程执行顺序的调度算法因每个操作系统而异。
如果有相同优先级的多个线程可用,调度程序会为每个线程分配执行的固定时间片。只要较高优先级的线程可以运行,较低优先级的线程就没有机会执行。当在给定的优先级没有可运行的线程的时候,调度程序移动到下一个较低优先级,并调度那个优先级的线程执行。
以下代码显示了具有不同优先级的两个子进程的执行:
using System;
using System.Threading;
class ThreadSchedule
{
public static