CPU

iOS构建流畅的交互界面--CPU,GPU资源消耗的原因和解决方案

CPU资源消耗的原因和解决方案

对象创建

轻量对象代替重量对象
* 不需要响应触摸事件的控件:CALayer显示
* 对象不涉及UI操作,则尽量放到后台线程创建
* 包含有CALayer的控件只能在主线程创建和操作
* 通过Storyboard 创建视图对象时,其资源消耗会比直接通过代码创建对象要大非常多,在性能敏感的界面里,storyboard不是一个好的技术选择
* 尽量推迟对象创建的时间,并把对象的创建分散到多个任务中去。
* 对象的复用代价比释放,创建新对象要小,这类对象应当尽量放到一个缓存池里复用

对象调整

* CALayer:CALayer内部并没有属性,当调用属性方法时,它内部是通过运行时resolveInstanceMethod为对象临时添加一个方法,并把对应属性值保存到内部的一个Dictionary里,同时还会通知delegate,创建动画等等,非常消耗资源。
* UIView的关于显示相关的属性(frame/bound/transform)等实际上都是CALayer属性映射来的,所以对UIView的这些属性进行调整时,消耗的资源要远大于一般的属性,所以,尽量减少不必要的属性修改

浅析CPU中断技术

本文仅对CPU中断技术进行理论上的剖析,而没有针对中断技术的实现进行分析。

作者:Change(Funeral)

一、什么是CPU中断?

使用计算机的过程中,经常会遇到这么一种情景:
1. 你正在看电影
2. 你的朋友发来一条QQ信息
3. 你一边回复朋友的信息,一边继续看电影

这个过程中,一切是那么的顺其自然。但理论上来说,播放电影的时候,CPU正在一丝不苟的执行着一条又一条的指令,它是如何在维持电影播放的情况下,及时接收并响应你的键盘输入信息呢?

这就是CPU中断技术在起作用。

CPU中断技术的定义如下:
• 计算机处于执行期间
• 系统内发生了非寻常或非预期的急需处理事件
• CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序
• 处理完毕后返回原来被中断处继续执行

认识cpu、核与线程

CPU与核心

物理核

• 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数

虚拟核

• 所谓的4核8线程,4核指的是物理核心。通过超线程技术,用一个物理核模拟两个虚拟核,每个核两个线程,总数为8线程。
• 在操作系统看来是8个核,但是实际上是4个物理核。
• 通过超线程技术可以实现单个物理核实现线程级别的并行计算,但是比不上性能两个物理核。

单核cpu和多核cpu

• 都是一个cpu,不同的是每个cpu上的核心数
• 多核cpu是多个单核cpu的替代方案,多核cpu减小了体积,同时也减少了功耗
• 一个核心只能同时执行一个线程

进程和线程

理解

• 进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位
• 线程是cpu调度和分配的基本单位

科普 | CPU频率

CPU频率,就是CPU的时钟频率,简单说是CPU运算时的工作的频率(1秒内发生的同步脉冲数)的简称。单位是Hz。它决定计算机的运行速度,随着计算机的发展,主频由过去MHZ发展到了当前的GHZ(1GHZ=10^3MHZ=10^6KHZ= 10^9HZ)。

通常来讲,在同系列微处理器,主频越高就代表计算机的速度也越快,但对于不同类型的处理器,它就只能作为一个参数来作参考。另外CPU的运算速度还要看CPU的流水线的各方面的性能指标。由于主频并不直接代表运算速度,所以在一定情况下,很可能会出现主频较高的CPU实际运算速度较低的现象。因此主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。

说到处理器主频,就要提到与之密切相关的两个概念:倍频与外频,外频是CPU的基准频率,单位也是MHz。外频是CPU与主板之间同步运行的速度,而且绝大部分电脑系统中外频也是内存与主板之间的同步运行的速度,在这种方式下,可以理解为CPU的外频直接与内存相连通,实现两者间的同步运行状态;倍频即主频与外频之比的倍数。

主频、外频、倍频,其关系式:主频=外频×倍频。早期的CPU并没有“倍频”这个概念,那时主频和系统总线的速度是一样的。

CPU的工作过程是怎样的?

CPU的工作过程是怎样的你知道吗?

CPU的工作过程

CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。有的指令中也直接包含操作数本身。

提取

第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(program counter)指定存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了cpu在程序里的踪迹。)

解码

关于CPU Cache -- 程序猿需要知道的那些事

本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识

作者:卢钧轶(cenalulu)
本文原文地址: http://cenalulu.github.io/linux/all-about-cpu-cache/

先来看一张本文所有概念的一个思维导图

关于CPU Cache -- 程序猿需要知道的那些事

为什么要有CPU Cache

当 CPU 空闲时它都在做什么?

操作系统行为的基本原理是,在任何一个给定的时刻,在一个 CPU 上有且只有一个任务是活动的。但是,如果 CPU 无事可做的时候,又会是什么样的呢?

事实证明,这种情况是非常普遍的,对于绝大多数的个人电脑来说,这确实是一种常态:大量的睡眠进程,它们都在等待某种情况下被唤醒,差不多在 100% 的 CPU 时间中,都处于虚构的“空闲任务”中。事实上,如果一个普通用户的 CPU 处于持续的繁忙中,它可能意味着有一个错误、bug、或者运行了恶意软件。

因为我们不能违反我们的原理,一些任务需要在一个 CPU 上激活。首先是因为,这是一个良好的设计:持续很长时间去遍历内核,检查是否有一个活动任务,这种特殊情况是不明智的做法。最好的设计是没有任何例外的情况。无论何时,你写一个 if 语句,Nyan Cat 就会喵喵喵。其次,我们需要使用空闲的 CPU 去做一些事情,让它们充满活力,你懂得,就是创建天网计划呗。

进程和线程有什么关系?它们的区别又是什么?

1.定义

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

2.关系

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

3.区别

Unity优化技巧:介绍具体的优化方式

下面介绍一下具体的优化方式,按照硬件划分分为CPU,GPU,内存&硬盘。

CPU

Top10

使用Profile找到CPU占用最靠前的函数,从最高的开始依次分析优化。定位的方法有很多,Unity的Profile,UWA的性能测试工具,比较推荐的是使用XCode,可以抓取一段时间内函数的开销。更品均准确也可以看到更底层。

Unity优化技巧:介绍具体的优化方式

如过函数比较复杂可以使用BeginSample/EndSample拆分,我在项目里通过添加条件编译进行了封装类似:MDebug.BeginSample("Character.TakeDamage");

这样可以跟随意和高效的定位到关心的地方。下面列举部分比较通用的优化方案。

LOD,代码只在必要时才会运行

CPU和GPU之间的通信

渲染流水线的起点是CPU,即应用阶段。大致可分为下面三个阶段:

1.把数据加载到显存
2.设置渲染状态
3.调用DrawCall

1.把数据加载到显存

所有渲染所需要的数据都需要从硬盘(Hard Disk Drive, HDD)中加载到系统内存(Random Access Memory,RAM)中。然后,网格和纹理等数据又被加载到显卡上的存储空间:显存(Video Random Access Memory,VRAM)中。这是因为显卡对于显存的访问速度更快,而大多数显卡对于RAM没有直接的访问权利。

CPU和GPU之间的通信

注意:真是渲染中需要加载到显存的数据复杂的多。例如:顶点的位置信息、法线方向、顶点颜色、纹理坐标等。

之后,开始通过CPU来设置渲染状态,从而使GPU进行渲染工作。

同步内容
--电子创新网--
粤ICP备12070055号