精读

浅谈APP端多线程性能

2017-05-17  本文已影响47人  wnido

引言

多线程,或者说异步的概念,是在 Web 2.0 中火起来,因为在浏览器中 JavaScript 在单线程上执行,和 UI 渲染共用一个线程。这就意味着 JavaScript 在执行的时候 UI渲染和响应是处于停滞状态,如果 JavaScript 执行时间超过100毫秒,用户就会感到页面卡顿,以为网页停止响应。而异步线程,将脚本执行和 UI渲染在不同线程中执行,互不影响,从而很好的保证的用户体验。基于这个,这之后的有用户交互界面的语言,在设计上都有异步 I/O 的设计,像 iOS、Androd、nodeJS、winPhone、cocos2d、Unity3D 等 ,都融入多线程的概念。

原理

APP端多线程

现在的 APP 运行,都有一个主线程,也就是 UI 线程 ,这个线程优先级是最高的,CPU会优先执行这个线程上代码。但因为这个线程也是 UI 渲染线程,如果在这个线程上有某些计算一直抢占 CPU ,及会造成界面卡顿,不响应用户操作的现象。另外如果渲染执行方法在一定时间内得不到 CPU , 就会被手机认为 非法 ,APP 整个进程被杀死。
为了避免,这种造成界面卡顿的现象,这里就需要多线程,将那些非常抢占CPU资源的操作,都放到其他线程中执行。比如说,文件下载的实现。

是不是线程越多越好呢?

物极必反,任何事情最合适的就是最好的,就像找女朋友,并不是越漂亮越好,是越适合你越好。线程越多,线程之间调度消耗的资源越多,盲目的使用多线程,反而会造成整个 APP 的性能下降。哪里该用多线程,哪里不该用多线程,这个不仅仅和APP 本身相关 还和 手机硬件相关;在目前,作为程序,只要追求单核/双核CPU上的执行效率高就行了,再多的现在还体现不出来。以后,程序应该会对多核CPU进行专门的优化,要不然完全体现不出多核的优势。

为什么苹果手机 CPU 现在最多还只有4核,而且还是打折的4核?


结束语

本来想写多一点,但发现除非贴点代码,要不然要说的就这些了。最后再提一句专门性的对多核进行优化APP,除非是图片、视频、游戏这类,要不然意义并不大,所以对大多数程序来说,了解点多线程粗略的知识,就完全够用了。

上一篇下一篇

猜你喜欢

热点阅读