文学城论坛
+A-

Windows、手机系统的多任务设计

flywhc 2011-05-26 15:38:08 ( reads)

其他手机操作系统的多任务设计其实我不是很了解,但据我了解大概是这样:

symbian多数API都是异步的,用个变量激活activeobject的方式,后台优先级低,前台优先级高,但不管怎样后台都有机会一直运行下去。因此造成写的不好的程序一直运行导致CPU不能进入待机状态。

Windows Mobile是用消息机制,其实内部用的event的方式,当消息队列无消息时可以idle,但也可不idle一直循环下去。因此写的不好的程序耗电更大一些。同样OS一般不会剥夺后台程序运行的机会

以上两种系统在CPU已经进入待机时,没有事件的时候所有线程都休息,有硬件消息到达时只有响应消息的线程会短暂运行,然后挂起,除非那个线程彻底唤醒CPU。设计不好的程序会一直让手机在唤醒状态,虽然屏幕黑的,但CPU和其他硬件一直运作。

android我不了解,应该也差不多吧。

 

IOS里,对于第三方应用程序是前台可以运行,后台不许运行。但苹果自己的程序却可以在后台运行。后来开发了后台的接口,可以在某些事件时运行有限的时间,例如网络收音机播放缓冲区空了要下载,或者程序关闭时给几秒保存数据,VoIP电话等等,都是限制应用,限制时间。这样即使程序没写好也不会浪费太多电。

 

此外,传统的推送(push)服务是一个手机客户端对应一个服务器,每个服务至少都要保持一个连接,每隔一段时间要唤醒系统发送一个heartbeat信号给服务器保持连接。如果有许多许多推送服务,就造成要维护大量连接,系统不断被唤醒,发一大堆heartbeat,浪费电池和网络流量,要知道对于3G发射机当数据发送后要保持一段的高功率再降低功率,如果反复发很小的数据包会使手机一直在高功率状态。IOS对于推送的应用采用统一的PUSH服务器,只需要操作系统维护一个socket连接就好了,大概每15分钟才发一次heartbeat。而且当推送事件到达时,所请求的程序并未运行,需要用户主动点击才能运行,例如收到邮件,不点查看按钮是不运行邮件程序的,这样防止了后台程序通过这种方式主动跑到前台来浪费电。

 

其实我要说的是新出的Windows Phone 7.1 Mango。它跟IOS差不多,也是不许第三方程序在后台运行。为了某种应用,例如多媒体播放、插着充电器的时候用WIFI下载(不插电用3G都不许下载)等等,也可以临时在后台运行。还有同样的PUSH服务机制,微软PUSH服务器也是免费的,随便一个IIS服务器即可轻松写好PUSH脚本。后台程序的问题不仅仅是耗电,还会影响前台程序的效率,这仅仅靠线程优先级是不够的。在WP里特别保证前台程序有90%的耗用以及90MB的内存;而后台总共最多只有那10%的CPU,每个程序可以有3MB内存,多媒体程序因为要解码可以多一点,5MB内存,内存用超了OS会杀掉进程,美名曰主动防止内存泄露……开发者肯定说这太限制自由了,可是这是保障用户体验的设计,因此WP手机有如此流畅的操作,不管装了多少程序,都不怕玩游戏的时候卡,甚至优于IPHONE。

跟帖(9)

flywhc

2011-05-26 15:38:39

标题应该是windows phone手机系统的多任务设计

?ttу

2011-05-26 15:45:21

任务切换时是不是会有cache polution - cache搞脏了必须更新dram,这样耗电大

?ttу

2011-05-26 15:49:08

很多wifi router用linux要4MB闪存, 用商业RTOS只要2MB就够了,所以

flywhc

2011-05-26 16:24:06

你是说context switch的时候paging问题吧?

?ttу

2011-05-26 17:30:49

据说以前他们是自己写的,后来不灵,乖乖买的相关code

?ttу

2011-05-27 04:33:45

到后台杀死很多事情不能做,好比im - android的内存不够才杀死导致不少

flywhc

2011-05-27 04:49:23

要理解在iOS和WP下IM软件的实现机制

fitwxc

2011-05-26 22:01:11

最好的推送是通过SMS,可惜SMS是供应商的摇钱树

flywhc

2011-05-27 05:12:58

VOIP也是用的TCP/IP吧?用的SIP/WAP网关?SMS可不是最好的