《Windows 8 权威指南》——2.7 降低功耗,延长续航时间才是王道

本节书摘来自异步社区《Windows 8 权威指南》一书中的第2章,第2.7节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.7 降低功耗,延长续航时间才是王道

Windows 8 权威指南
对于现如今的电脑而言,节能又是一个值得讨论的话题。对于笔记本和平板电脑这类移动设备而言,降低功耗、延长续航时间更是必须解决的问题。

我们都知道应用程序会通过消耗资源(例如,CPU、磁盘、内存和其他资源)来影响电源消耗,因为每种资源都具有其相应的电源成本。因此,降低电源消耗的关键在于当应用程序处于活动状态时允许其使用所需的资源,并且当它们处于闲置状态时尽可能地减少其使用的资源。这一点对于操作系统本身同样适用。

在Windows 8中,我们从一条适用于大多数Metro风格应用程序的规则入手:如果应用程序未在屏幕中出现,或者屏幕未开启,则应用程序不应该影响您的电源寿命。这并不意味着WinRT和用户模型会妨碍多任务功能。我们需要通过全新的方式来思考何时以及如何将先进的硬件功能、网络需求、设备类型和可靠性、安全性、隐私性纳入考虑。虽然存在一些例外(例如,后台电子邮件同步、桌面工具),但在大多数情况下,我们希望应用程序能够在您与其积极互动时完成大部分工作。当应用程序不在前台工作时,我们希望确保其完全挂起,或根据应用程序可访问的一系列常用后台功能使用有限的资源。

我们将目标聚焦在前台,就会发现前台的程序有三种运行的状态;

在前台活动运行;
在后台挂起;
执行某些已定义的后台活动。
下面就分别详细介绍这三种状态的功耗使用情况。

状态一:在前台活动运行
实现前台应用程序的活动运行非常容易,我们只需允许其运行并利用CPU、磁盘、内存和其他所需的资源。在这方面,Metro风格的应用程序在本质上与Windows应用程序一直以来的工作方式完全相同。这种状态包含两种情况,即全屏状态下的单个应用程序,以及屏幕中有两个应用程序,其中一个“贴靠”到侧面时的情况。这仅适用于屏幕开启时的情况,因为这样才能表明用户正在与PC进行交互。

开发快速且响应及时的应用程序需要考虑一系列新的因素。就像从字符过渡到GUI编程一样,由于概念存在本质上的差异,构建节约电源和资源的应用程序需要采用全新的方法。举例来说,早期Windows程序开发人员经常对WNDPROC的概念感到困惑,并感到处理键入的最佳方式是捕获中断,并将其转换为按键;然而基于消息的方法打破了这一做法,Windows会处理这种转换并告知应用程序何时应接收按键,这与早期的实现方式完全不同。由于目前在售的PC 75%以上通过电池供电,程序开发人员显然需要重新思考程序的开发理念。

鉴于此,在开发应用程序时应保持前瞻性的态度,以便跟上硬件发展的速度和客户的需求变化。我们需要对现有应用程序模式进行改进,以便满足用户节约电源和延长电池寿命的需要。当然,您目前使用的桌面应用程序将继续按照Windows 7中的方式工作(同时也会在多个方面得到改进),但随着时间的推移,我们将在Windows中加入新的应用程序,以便帮助您消耗更少的电源完成更多工作,范围从娱乐直到专业工具,不一而足。可用于计算的资源,需要的资源及计算类型正在不断发生变化,而Windows 8将为您提供抓住这一机遇所需的新工具。

在基于前台的方法中,并发对于开发快速、顺畅且响应及时的应用程序来说至关重要。在Build大会上,我们曾展示过如何使用新的工具和API来开发高度并发的应用程序。借助这些工具,开发人员可以从全新的角度思考如何针对特定情境编写代码。例如,程序开发人员可以利用新操作系统的后台任务基础结构,通过高效节能的方式在后台完成所需的活动,而不再需要保持一个始终在后台单独运行的应用程序。后台任务可以通过多种方式激活,例如,推送通知、定时事件乃至传入网络数据。当您的PC接入电源时,智能化的系统还将允许后台应用程序更频繁地运行。总而言之,通过按需运行的代码来替代始终运行的代码,电池寿命将大大延长。例如,当您的PC接入电源时,新闻阅读器应用程序可以在午夜自动为您下载内容,这样当您启动该应用程序时,将在第一时间看到最新的内容,这样做不会影响工作效率,而且这种全新的工作方式会帮助您在尽可能减少对关键系统资源影响的情况下完成工作。

除了改进应用程序代码在后台执行的方式之外,我们还在工具基础结构和WinRT API方面进行了许多改进,以便简化和增强异步编程。快速响应应用程序需要在异步编程的坚实基础上构建。在Build大会的一次主要会议上,Anders Hejlsberg曾展示过一种WinRT方法,通过该方法可以查看以大型商品目录为中心的异步用户体验。借助此类技术,应用程序将能够提供出色的情境和前台性能,并延长电池寿命。

状态二:挂起后台的应用程序
当您启动应用程序并从中切出后,将进入第二阶段,操作系统会将该应用程序挂起。也就是说,Windows计划程序(用于计划进程和线程的CPU访问的组件)不会将其包含在CPU计划之中。由于操作系统不会将其列入计划,该应用程序将不会使用CPU,CPU可能会因此进入低功耗状态。CPU进入低功耗状态对于延长电池寿命来说可能至关重要。开发人员对这种方法可能并不陌生,因为该方法与您调试应用程序时将其“暂停”的过程非常相似。实际上,该应用程序运行的所有线程都将暂停,挂起的应用程序与缓存状态类似。由于应用程序已经初始化,您将获得实时应用程序切换的便利。操作系统计划程序只需在应用程序切换回前台时再次允许其执行即可。

这种全新挂起状态的优点之一在于您可以实时切换回挂起的应用程序。当您切换至挂起的应用程序时,该应用程序将瞬间恢复,并返回至您离开时的状态。这样,您就能够以前所未有的速度,在Windows中的更多应用程序间更快地切换,您无须再关心PC中正在运行的应用程序数量。由于实时图块会通知您应用程序的当前状态,并且应用程序能够保存和恢复状态,大量应用程序始终看起来像是处于运行状态。

例如,假设一个应用程序会持续记录您即将到来的行程。此应用程序可以通过实时图块通知向您显示下一次行程的状态,即使应用程序已挂起甚至未在后台中运行也是如此。当您切换至此应用程序时,它将自动回到上一次的位置(例如,行程搜索),仿佛您不曾离开过。由于正在运行的概念非常抽象,启动应用程序和切换至应用程序本质上已经成为了同义词。无论通过Back堆栈、ALT+TAB还是[Start](开始)屏幕切换至应用程序,您始终可以实时返回至已挂起的应用程序。

因此,“正在运行”的程序列表实际上就是您在[Start](开始)屏幕上看到的程序列表。对于键盘用户,请记住以下几点:ALT+TAB与Windows 7中的工作方式相同,适用于所有正在运行的程序;[Taskbar](任务栏)对于桌面应用程序的工作方式也完全相同(甚至针对多显示器情境进行了优化)。

借助挂起应用程序的功能,您可以在不影响电池寿命或系统性能的情况下,非常快速地在它们之间进行切换,这与传统的桌面应用程序完全不同。在桌面应用程序中,我们将精力全部放在如何优化启动耗时较长的应用程序的工作流程上。

通常来说,在两种情况下我们不会挂起未进行后台活动的应用程序。第一,如果您尚未在当前登录的会话中启动该应用程序,则必须单击应用程序的图块将其启动。第二种情况更加有趣。如果系统的内存快要耗尽,系统将移除某个应用程序的挂起状态并终止该应用程序。内存是一种有限的资源,而我们希望确保您最常使用的应用程序随时处于就绪状态。如果您一段时间内未使用某个应用程序,而操作系统此时需要更多内存,则系统将自动终止其中一个挂起的应用程序。这种情况不会经常发生,因为内存管理器将接手挂起的应用程序并将其保存到磁盘(磁盘的容量通常比物理内存更大)。当您切换回这些应用程序时,它们将瞬间就绪。但在某些情况下,系统必须终止某个挂起的应用程序。这种情况通常发生在多个用户登录到一台PC,或您正在使用大量内存密集型应用程序时。

操作系统在决定终止哪些应用程序时,会对多种因素进行综合考量,例如,应用程序最后一次使用的时间,应用程序占用的内存大小等。理想情况下,操作系统会终止尽可能少的应用程序,因此,您将能够频繁地切换回已挂起的应用程序。即使应用程序会从挂起状态终止,实际上对您的体验影响甚微,因为应用程序模型的演进允许开发人员在应用程序使用过程中逐步保存其状态,并在应用程序重新启动时将其恢复。例如,当您决定转移到其他应用程序时,行程跟踪应用程序可以记录下您正位于行程搜索页面,当您切换回来时,应用程序将利用该信息返回相应页面,即使系统已将其终止也是如此。

还要强调一点,即使后台中有多个已挂起的应用程序正在占用内存,也不会对PC的性能或电池寿命产生负面影响。事实上,您根本不需要直接管理或关闭应用程序。这在当今的计算设备中是一种常见的方法,并代表了一种前卫的操作系统设计理念。

即使无须通过关闭应用程序来提高性能或电池寿命,您仍可以在即将发布的Windows 8 Beta版中关闭应用程序。在某些情况下,应用程序会陷入错误状态,或者您已经不需要继续使用该应用程序。您将可以使用鼠标、触控操作或键盘快捷键来关闭应用程序。

在释放版中,您可以先运行多个该版本中内置的应用程序(例如,股票、新闻或天气应用程序),然后通过打开新的任务管理器来查看生效的挂起状态。请注意,此处列出的CPU使用率为0%,如图2.26所示,这是由于虽然这些应用程序在内存中,但它们实质上处于睡眠状态,不会对电池寿命或性能产生负面影响。

screenshot

状态三:执行后台活动
开发人员需要思考如何能够在不影响电池寿命的情况下,完成之前可在后台完成的任务。您可以求助于多任务来实现这一点,但如果所有应用程序始终在运行后台任务,您将永远无法实现较长(甚至有所改善)的电池寿命。随着笔记本电脑和移动设备的日益普及,这一点的重要性显然不可小视。因此在Windows 8和WinRT中,我们创建了新的API以涵盖Metro风格应用程序的后台处理。

再次强调,您的桌面应用程序将继续按照一直以来的方式运行,但他们对于电池寿命的影响也将如常(虽然我们将在下文中介绍某些改进)。

我们力图提供丰富的应用程序功能及多任务支持以满足人们对Windows的期望,同时在资源使用率方面做出权衡。为此,我们列出了一系列希望支持的关键情境,并着手通过尽可能高效利用资源的方式来实现这些情境。结论就是一系列后台多任务API,这些API允许应用程序通过高效利用资源和电源的方式在后台完成操作,并可以帮助开发人员将精力集中在应用程序的功能上,而不必进行额外的工作。

我们采取专注情境的方法来完成应用程序可能需要在后台完成的大多数常见任务。以下是WinRT中Metro风格应用程序支持的后台功能。

播放音乐。
从网站下载文件或将文件上传至网站。
持续刷新实时图块的内容
打印。
接收VoIP通话。
接收即时消息。
接收电子邮件。
共享内容(例如,将照片上传到Facebook)。
通过连线设备同步内容(例如,同步照片)。
以下是根据开发人员的常用模式及我们期待看到的常见模式设置的一组情境。其中某些情境使用了相同的平台功能,接下来我们将对它们进行一一介绍,以便让您了解Windows 8的前景和能力,如表2.2所示。
screenshot
screenshot

上面讲完关注于前台的应用程序执行状态,这里还有另一个降低功耗的方式,那就是当电脑在待命或者睡眠时具有连接功能。

当Windows 8发布时,将面临前所未有的众多P种类。其中许多将具有与目前运行Windows 7的设备相同的电源选项。除了彻底关闭外,它们还可以根据需要或在一段闲置期后进入“睡眠”状态。在睡眠状态下,所有系统活动将彻底挂起,如图2.27所示。
screenshot

在上图中我们可以看到,在PC睡眠前的闲置期,桌面应用程序将继续按照与所有Windows版本中相同的方式继续运行,同时Metro风格的应用程序将按照稍早前介绍的受控方式运行。当PC进入睡眠模式后,桌面应用程序和Metro风格的应用程序都将彻底挂起,这将有助于延长电池寿命。电脑进入睡眠模式后,消耗的电量将非常少,但这样做不利于数据刷新,因为当电脑进入睡眠状态时,将不会更新实时图块、下载新电子邮件或准备好向您发送警报及其他通知。

针对很少完全关闭的新型PC,Windows 8提供了一种类似智能手机的电源状态。这些有趣的PC通常基于“片上系统”(SoC)体系构建,进入闲置期后,它们不会关闭,而是在保持运行的同时进入一种能耗极低的状态。这种新的状态被称为“连接待命”。该功能可支持某些常见的连接情境,例如,始终更新电子邮件,并能够接收即时消息或来电,同时还能提供惊人的电池寿命。下图显示了桌面应用程序和Metro风格的应用程序在连接待命状态下的行为。但为了真正提高工作效率,我们不得不同时考虑Metro风格的应用程序(您已经看到,我们可以非常有效地确保节约系统资源)和桌面应用程序,这对于桌面应用程序来说比较困难,因为它们经过多年的完善,旨在以全(在前台运行时)或无(当PC进入睡眠模式时)的方式访问系统资源,如图2.28所示。

screenshot

为此,我们在Windows 8加入了一种名为“桌面活动审查器”的新组件,该组件只会在这些具有连接待命功能的新平台上运行。此组件旨在减少设备进入连接待命状态后桌面应用程序所使用的资源。如果我们允许应用程序在这种低能耗模式下不受抑制地继续运行,PC的电量将更快耗尽。因此,我们会挂起桌面应用程序,阻止其使用资源,并尽量延长电池寿命。从应用程序的角度来看,这与PC进入睡眠状态的情形别无二致。当PC从连接待命状态中唤醒时,应用程序将按照PC从睡眠状态中唤醒时的模式恢复。

此外,系统中还有几种连接待命状态所需的组件,我们不能将其挂起。这些组件包括驱动程序、某些收件箱和第3方服务,当然,还有我们之前提到的使用后台资源的Metro风格应用程序。这些组件提供的功能包括:当您返回设备时,响应用户的输入,或提供网络功能。我们对这些功能进行了谨慎的评估,以确保它们不会对电池寿命造成影响,然后才允许其在连接待命状态下运行。此外,还有一系列进程需要保持运行,以响应系统的活动。这些进程将在受到抑制的情况下短期运行,直到某种后台活动启动后,它们才会不受抑制地运行。此类进程的典型示例是反病毒产品,它们经常会为了响应某种系统活动而进行扫描。当通过后台机制进行接收电子邮件等活动时,反病毒产品将不受抑制地运行。但在未发生传入网络活动的大部分时间,这些组件将受到抑制,以便尽量减少对电池寿命的影响。

我们可以看到,在设计Windows 8时投入了大量的精力来延长电池寿命。微软开发出了全新的应用程序模型,以便在支持连接体验的同时提供始终如一的长久电池寿命。针对Windows 7设计的应用程序将继续按照原有的模式工作,而新的Metro风格应用程序可以利用操作系统提供的后台基础架构,开发出更加高效节能的全新连接体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值