编程有感

作者: Penner | 来源:发表于2015-12-31 22:39 被阅读376次

不知道该如何命名这篇文章,算做是工作多年的一些基础总结吧。短时间完成的,比较粗糙,也会有错误之处。最近太忙,没太多时间沉淀。

显示

人眼能够识别的帧率大概是60FPS,所以一帧的显示周期为16ms左右。客户端都是以消息队列的形式处理用户操作或系统回调,故我们在Activity的oncreate或�UIViewController的viewDidLoad等主线程回调中,代码的执行时间都不能超过16ms,否则会有丢帧的情况发生。

丢帧

CPU需要计算当前页面所有视图的大小、位置及图片解码等,然后交给GPU渲染成图像帧,最后提交帧缓冲区(现在系统大多采用双缓冲区,有点类似Android里的SurfaceView的机制)。液晶屏和早起的CRT显示屏原理类似,都是由视频控制器从帧缓冲区逐行读取数据,最终由显示器完成画面的显示,16ms后重复此操作 。在这个过程中,如果CPU和GPU没能将新的数据完成计算提交到帧缓冲区,那这一帧将被丢弃,就是所谓的丢帧。

内存与线程

内存分为堆和栈,线程是CPU执行的最小单元,每个线程都有自己的调用堆栈及各种寄存器的值、程序计数器和栈指针,所以线程创建的代价是挺大的,现在语言库都有自己的线程池(Android中的AsyncTask及Ios中的GCD等都是基于此)。栈的内存由操作系统管理,函数调用的时候将函数参数与函数内临时变量等压入栈,函数返回时会出栈自动释放(由栈指针等控制);而在这个过程中通过new或者alloc等实例化出来的对象会保存在堆上,由开发人员自己管理(垃圾回收或delete等)。

客户端优化

常见的优化手段有很多,比如减少View的嵌套层级,将大任务分解成多个小任务将由消息循环逐个处理。内存方面做到需要多少用多少,减少内存释放需要付出的代价。尽量减少阻塞主线程,Android与Ios中的系统Ui库都是在主线程中计算大小位置与绘制,如果业务产品需要,可以考虑SurfaceView和CoreText以及AsyncDisplayKit等优秀第三方库等。

感慨

计算机技术通过多年的发展,语言、编译器、SDK及Library极大的提高了开发效率,但降低门槛的同时也让优秀更加难以企及了。不论软件如何发展,硬件的构成依旧没什么变化,计算机的运行基础依旧,所以掌握了基础与原理,就可以不变应外变,迅速掌握新技术适应业务与产品的发展。

相关文章

  • 编程有感

    不知道该如何命名这篇文章,算做是工作多年的一些基础总结吧。短时间完成的,比较粗糙,也会有错误之处。最近太忙,没太多...

  • 静默编程有感

    今天参加了TW主办的无压无臭静默编程活动,早早起床顶着大风去了公司,9:30活动正式开始,大家自我介绍后,听道长和...

  • 谈谈同伴间的那些事

    看到这张图,大家有没有感觉熟悉?这是目前很多学校都在推进的编程教育——编程猫,但是我今天要分享的不是关于编程技术的...

  • Linux Socket编程(不限Linux)

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程...

  • 对编程行业狂热有感

    对编程行业狂热有感 国内的人似乎一说到计算机,一说到软件,第一反应就是编程, 而一说到编程, 第一反应又是语言, ...

  • 人生都需要元编程

    人生都需要元编程 - 读[MacTalk-池建强的随笔文集]《macTalk 人生元编程》有感 : 这两天一口气读...

  • 参编程学习有感

    所谓编程,是让计算机为解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。在大家眼中,编...

  • 人生元编程   有感

    最近两天时间把池建强的《人生元编程》看了四分之三,还有第一部分讲Mac的还没看(这部分主要是自已没有用过Mac土豪...

  • 简单聊聊c/c++新手常犯的错误

    回顾这几年学习编程有感而写 热身 对很多CS专业的同学来讲,C语言 会是你们接触的首门编程语言。之后可能会进阶难度...

  • MacTalk人生元编程-有感

    一切喜怒哀惧都是心中的自言自语。元meta,是指能够对自身状态进行描述。所有伟大的事业都源于梦想,始于微不足道。1...

网友评论

    本文标题:编程有感

    本文链接:https://www.haomeiwen.com/subject/dihihttx.html