C#线程优先级浅析

C#线程优先级的必要性:如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要,该怎么办在这种情况下,可以在一个进程中为不同的线程指定不同的优先级。一般情况下,如果有优先级较高的线程在工作,就不会给优先级较低的线程分配任何时间片,其优点是可以保证给接收用户输入的线程指定较高的优先级。在大多数的时间内,这个线程什么也不做,而其他线程则执行它们的任务。但是,如果用户输入了信息,这个线程就立即获得比应用程序中其他线程更高的优先级,在短时间内处理用户输入事件。

C#线程优先级的规律:高优先级的线程可以完全阻止低优先级的线程执行,因此在改变线程的优先级时要特别小心。线程的优先级可以定义为ThreadPriority枚举的值,即Highest、AboveNormal、Normal、BelowNormal和 Lowest。

注意,每个进程都有一个基本优先级,这些值与进程的优先级是有关系的。给线程指定较高的优先级,可以确保它在该进程中比其他线程优先执行,但系统上可能还运行着其他进程,它们的线程有更高的优先级。因此Windows给自己的操作系统线程指定高优先级。

在ThreadPlayaround示例中,对Main()方法做如下修改,就可以看出修改线程的优先级的效果:

 
 
 
  1. ThreadStart workerStart = new ThreadStart(StartMethod);  
  2.  
  3. Thread workerThread = new Thread(workerStart);  
  4.  
  5. workerThread.Name = "Worker";  
  6.  
  7. workerThread.Priority = ThreadPriority.AboveNormal;  
  8.  
  9. workerThread.Start();  

其中,工作线程的优先级比主线程高,运行结果如下所示:

 
 
 
  1. ThreadPlayaroundWithPriorities  
  2.  
  3. Interval to display results at> 1000000  
  4.  
  5. Starting thread: Main Thread  
  6.  
  7. Main Thread: Current Culture = en-US  
  8.  
  9. Starting thread: Worker  
  10.  
  11. Worker: Current Culture = en-US  
  12.  
  13. Main Thread: count has reached 1000000  
  14.  
  15. Worker: count has reached 1000000  
  16.  
  17. Worker: count has reached 2000000  
  18.  
  19. Worker: count has reached 3000000  
  20.  
  21. Worker: count has reached 4000000  
  22.  
  23. Worker: count has reached 5000000  
  24.  
  25. Worker: count has reached 6000000  
  26.  
  27. Worker: count has reached 7000000  
  28.  
  29. Worker: count has reached 8000000  
  30.  
  31. Worker Thread Finished  
  32.  
  33. Main Thread: count has reached 2000000  
  34.  
  35. Main Thread: count has reached 3000000  
  36.  
  37. Main Thread: count has reached 4000000  
  38.  
  39. Main Thread: count has reached 5000000  
  40.  
  41. Main Thread: count has reached 6000000  
  42.  
  43. Main Thread: count has reached 7000000  
  44.  
  45. Main Thread: count has reached 8000000  
  46.  
  47. Main Thread Finished 

这说明,当工作线程的优先级为AboveNormal时,一旦工作线程被启动,主线程就不再运行。

C#线程优先级的相关内容就向你介绍到这里,希望对你了解和学习C#线程优先级有所帮助。

【编辑推荐】

  1. C#线程类的定义实例解析
  2. 判断线程运行状态的两种方法
  3. C#线程学习的一点体会和总结
  4. C#多线程学习经验小结
  5. C#线程控制浅析
THE END