C#3.0核心技术-第19章线程-全新翻译注释-19.2(6)

来源:互联网 发布:数据库测试用例怎么写 编辑:程序博客网 时间:2024/04/30 14:15

19.2.5 线程优先权

一个线程的优先权属性决定了它较同一进程中其它活动线程能够获得多少执行时间,以如下尺度:

clip_image001

只有当多个线程同时活动时这才变得相关。

提升线程的优先权不能够使它有能力执行实时工作,因为这仍旧受到应用程序的进程优先级的限制。为了执行实时工作,你必须也使用System.Diagnostics中的Process类提升进程的优先权(我们不告诉你如何做到这一点):

clip_image002

ProcessPriorityClass.High实际上距最高优先权:Realtime仅有一步之遥。设置一个进程的优先权到Realtime指示OS你从来不想这个进程分给其它进程CPU时间。如果你的程序进入一个偶然发生的无限循环,你会发现甚至整个操作系统被锁定了,除了电源按钮外别无其它拯救你的方法!由于这个原因,High通常是实时应用程序的最佳选择。

原文注:

如果你的实时应用程序有一个用户界面,提升进程的优先权给予屏幕更新太多的CPU时间,减缓了整个计算机(特别是如果UI很复杂)。降低主线程(译者注:一般情况下都是负责UI的线程)优先权的同时提升进程的优先权确保实时线程不会被屏幕重画占先,但是无法解决其它进程CPU时间饥饿的问题(译者注:这是由于实时应用程序中的用户界面线程也沾了整个进程的光,分配到更多的CPU事件,导致其它进程饥饿),因为操作系统仍将分配不成比例的资源作为一个整体分配给该进程。一个理想的解决方案是使实时工作和用户界面以不同的进程优先权运行在不同的应用程序中,以Remoting或者内存映射文件进行通信。内存映射文件非常适合这项任务;我们在22章的22..7节中解释它们如何工作。

即使有一个提升了的进程优先权,这里仍旧有一个对在处理艰巨的实时需求的托管环境的适合性的限制。在第12章中,我们描述了垃圾回收的话题以及解决办法。更进一步,操作系统可能呈现出更多的挑战—甚至对于非托管应用程序—这些最好用专用的硬件或者一个特定的实时平台来解决。(译者注:这段话的意思是托管程序不太适合作为实时应用程序, 事实上即使是非托管应用程序在一般的操作系统上也不太适合作为实时应用程序,实时应用程序最好在专用硬件和专用平台上运行)

原创粉丝点击