我们可以从硬件、操作系统、应用软件三方面来回答这个问题。
硬件角度 CPU 方面,两者 CPU 型号分别为:A7 和 MSM8974。MSM8974 拥有 4 核,单核频率最高可达 2.3GHz,相比 A7 拥有 2 核,最高频率为 1.4GHz。所以,就单纯的 CPU 计算能力来讲,MSM8974 要优于 A7,毕竟它单核频率比 A7 要高很多。另外,由于 MSM8974 有 4 核,因此它处理多线程并发能力要强于 A7。工艺方面,两者拥有相同的 28nm 制程,但 MSM8974 频率高,核心多,所以密集计算情况下,它的功耗和发热量应该要比 A7 高。
从 CPU 的 Cache 方面看,A7 拥有 64KB+64KB 的 L1 Cache,1MB L2 Cache 和 4MB L3 Cache;相比较,MSM8974 在这方面要差得多,相信是为了节约成本,仅仅配置了 16KB+16KB L1 Cache, 2MB L2 Cache,且没有 L3 Cache。如此小的 Cache,在实际运行过程中,肯定会发生大量 Cache Miss,这就会导致 CPU 常常在“等待”外围 IO(如内存),从而白白浪费了 CPU 的高速计算能力。MSM8974 在 Cache 的配置上,犹如 V8 引擎的跑车,却配置了一套四速变速箱,让人无语。
GPU 方面,A7 集成 PowerVR G6430 GPU,而 MSM8974 集成了 Adreno 330 GPU。根据资料,G6430 的图形处理性能 GFLOPS 为 166.4-249.6,而 Adreno 330 的图形处理性能 GFLOPS 仅为 129.6-158.4。所以,PowerVR G6430 的图形性能要明显优于 Adreno 330。
内存(运存)方面,设备配置的内存越大,表示操作系统允许更多的应用程序驻留内存,在不同的应用程序之间切换会更顺畅。而且,每个应用程序允许使用的内存也会越大,相对来说会更流畅。这方面 Nexus 的 2GB 内存要占优。
操作系统角度 Apple IOS,apple 开发的移动设备操作系统。IOS 的内核使用的是 darwin os,该内核与 linux 的宏内核操作系统不同,是一个类似于 windows 的混合型内核。有点类型微内核的感觉,不过就性能而言,与 Linux 相比应该没有什么优势。但是,因为 ios 的应用程序是使用 objective c 编码,最终被直接编译为 ARM 指令集。因此,在实际设备运行过程中,应用程序相当于直接在 CPU 上运行,避免了虚拟机的指令翻译开销,所以 ios 的应用程序执行效率相比 android 要高。
Google Android,是基于 Linux 操作系统的一个应用程序框架。它大致由以下几个组件组成:Linux 内核、Android 运行库、通用组件库、应用程序框架和应用程序本身。最终的用户应用程序均运行在一个个隔离的“沙箱”环境中,彼此隔离。其中,最重要的是,Android 应用程序的指令不是机器指令,而是 dalvik 虚拟机指令。也就是说,Android 提供了一个 Dalvik 虚拟机,将 Android 应用程序的 dalvik 指令翻译成最终的 arm 机器指令。这中间虚拟机的翻译过程是有性能损耗的。
应用程序角度 IOS 禁止应用程序在后台运行,所有切换到后台的应用程序被操作系统自动休眠,只有前台程序可以占用 CPU;相比较,Android 就开放得多,它运行应用程序任意创建后台服务 Service,所有 Service 都可以在后台任意占用 CPU 和内存。因此,当 Android 安装的应用程序越来越多,且应用程序毫无节制地创建后台服务的话,系统前台应用就被迫和越来越多的后台服务共享 CPU 资源,从而拖慢了整个系统的速度。也不能说 Android 这种真正的多任务模式不好,它是一把双刃剑,给应用程序更广阔的发挥空间的前提下,也给了应用程序滥用 CPU 的权限。因此,从这方面讲,IOS 更有利于应用程序发挥流畅性,但代价是应用程序无法再后台工作;Android 更有利于发挥应用程序功能,例如后台收离线消息,后台下载等应用。 从屏幕分辨率来看,IOS 只有有限几种分辨率,最高也就 1136*640,都没有达到 1080P 全高清的级别。比较而言,Nexus5 的分辨率达到了 1080*1920 全高清级别。为此,应用程序需要更多资源来渲染图像,比较而言,IOS 的应用程序就可以更容易达到流畅的帧数;但 Nexus5 的屏幕则可以达到更锐利,更清晰的图像。
总结 硬件方面,Apple iPhone5s 的主频较低,但 cache 很大,且拥有更高性能的 GPU;Nexus5 的 CPU 主频很高,但 Cache 较小,且 GPU 相对较弱。所以,iPhone5s 更适合表现图像或动画;Nexus5 的高主频和更多核心,更适合高密集计算工作和并行计算。但就题主所说的流畅性,iPhone5s 更胜一筹; 操作系统方面,IOS 没有虚拟机开销,性能相比需要 dalvik 虚拟机转换的 Android,也是胜了一筹; 应用程序角度,由于 iPhone5s 的屏幕分辨率较低,且没有后台应用程序干扰,所以 iPhone5s 更容易达到流畅的效果。
综上,iPhone 5S 更容易给用户流畅的感觉。
------- 更新分割线 ------
容我加几句:
- 上文中仅对比 iPhone5S 和 Nexus5,并没有涉及其他 apple 设备和 android 设备。所以分辨率的 BUG 请大家别纠结,iPhone5S 的分辨率比 Nexus 低是事实;
- 我并没有说 iPhone5S 比 Nexus5 好。相反,我本人用的是 Android。只是说 iPhone5S 因为有更强大的 GPU 和机器二进制代码的 APP,所以更容易让 APP 达到流畅的帧数。每秒 24 帧就可以说流畅的,Nexus5 的 GPU 也不弱,也是可以达到的,大家不要太纠结。我其实更喜欢 Android 的开放性,自己做几个 pet project 玩玩,刷刷 ROM,可玩性比 iPhone 好(我不玩手机游戏);
- 32 位和 64 位的问题,32 位 APP 在 64 位 CPU 上运行,性能没啥提升;
- Android 为什么使用虚拟机,肯定是经过考虑的。不会平白无故的做损失性能的事情,我的理解是,为了跨平台,让 APP 与 CPU 架构无关。有了 Dalvik 中间件,Android 的 APP 可以不做任何改动,在任何 CPU 体系架构平台下运行,这点太 NB 了。知道 WindowsRT 无法运行 X86 的应用程序是为啥,就是因为 PC 的桌面软件早已和 X86 架构绑定了。现在微软的.netframework 之类,也是做起了 APP 虚拟化的路,而 Android 从一开始就这么做,我觉得挺明智的,那一点性能损失我觉得可以接受。