通知和轮询的区别

from:http://club.tgfcer.com/thread-6345441-1-1.html


相关:

Java基础:三步学会Java Socket编程
http://tech.163.com/06/0410/09/2EBABUD20009159T.html


Linux Socket编程(不限Linux)
http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

一步一步android(15):关于socket编程【以聊天为例】
http://hi.baidu.com/yaoyuanhuajx/item/9b93d7565f315ba9acc857d7


Android推送通知指南
http://wenku.baidu.com/view/c354a6b569dc5022aaea00b6.html



我还是单独开一贴吧,免得再哪贴里面光喷去了。。。
通知实现的方法,按我的理解和linux下很多程序实现的方法如下: 
程序再起socket的时候,设定socket为柱塞的方式,也就是说socket监听端口的时候,如果没有数据,监听进程就是挂起休眠起来,实际上,这个时候程序已经休眠,不占用cpu资源,也就谈不上费电,当基带从空口获取到一个数据片的时候, 底层会触发一个中断给cpu,cpu判断这个中断类型,如果是ip包,cpu会吧数据传给tcp/ip协议栈,协议栈根据socket注册情况,唤醒相应的程序,这个时候就可以切换到真正处理的app里面去了,这样实现起来省电,高效,但是ios悲催的内存大小和进程调度方式,可能会导致休眠的程序丢失一部分进程资源,导致切换会app的时候,可能还需要重新登陆==一系列动作,这样造成用户体验不好,但是我觉得这个机制是非常适合手持设备的,希望将来ios能解决进程切换的问题。这就是为什么有个兄弟说一个ios设备给另外一个ios设备发消息,可能再1秒以内能收到的原因。因为全部都是主动触发的方式,相当于多米诺骨牌一样,自然速度会很快

所谓轮询的方式,
哪就是很多现在pc和android上实现的方法,注册socket为非柱塞的方式,也就是说socket监听端口的时候,如果没有数据,监听进程就会放过这次监听,使用timer/sleep 固定时间,然后到一个门限的时候,比如说1秒/30秒的时候,主动向server发送查询的数据包,server查询结果,然后返回给设备,设备就知道这个查询时间片内有没有本程序的数据,这样实现起来费电,复杂,但是由于android使用linux进程调度算法,最终结果看起来也是可以接受的。

以上2中方式差别,再linux和xp下面使用ping就可以看到差别,linux ping包的延时可能再1ms级别,xp就是10ms级别,延时差的很远。性能也差不少,至于android为什么不使用push通知+完善的后台调度,我只能说这是历史原因造成的,以前android就是个野孩子,没有通知服务器这种数据中心,直接蛮干就ok了。导致出现现在各种费电的程序跑再后台。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值