如何优化代码(cpu请求内存)

      提高查询速度,众所周知一般缓存到(缓存)redis,查询(缓存)redis。减少mysql查询

      举个例子,java执行一条代码,从数据库取出两个数据,int a=4,int b=6,  把这个两个数相加。

执行的步骤,就是,先从数据库或者缓存中,把数据加载到内存中,数据再从内存交给cpu执行引擎进行处理。

      咱们知道cpu从内存中查询数据是很快的, 但是对于计算机来说还是很慢的。

这里我输出一下我理解的,代码,如何减少cpu查询内存次数。提高速度。

cpu:

 1:电脑有cpu和内存,从电脑开始起,cpu和内存都在不断的发展,但是内存跟不上cpu提升

cpu研发者,在cpu内镶嵌3级缓存。l1.l2.l3

2:每个cpu目前都是多核,  l1,l2是每个核独有的,l3缓存是多核共享的。

3:当执行一个程序,cpu  内核1创建一个线程,会把数据从内存,复制到l3.再复制到,l2,l1,到寄存器

4:cpu有空间局部性,和时间局部性。

5: cpu的空间局部性,当cpu把内存中数据加载到缓存中,它会把该数据周围连续的数据加载缓存中去。

6:cpu的时间局部性,当一个数据被加载,cpu会认为一段时间,该数据还会被使用,不会立马清除

7:例子:一个long类型的二维数组,数据相加   =====      long[ 1024 ] [ 6 ]

       一维数组是1024个数据,二维是6个数据,要把1024*6相加。

第一种方式:先加二维数组6个数据

第二种方式:先加一维数组1024个数据

=================================================================

先从内存中加载  [0][1] 到内存中去,根据cpu空间局部性,会把[0][1]这个数据的连续数据加载到内存中去。

          如果按照第一种方式,它会把[0][1],[0][2],[0][3],[0][4],[0][5],[0][6]同时加载到内存中去

           如果按照第二种方式,它会只把[0][1]加载到内存中去,其它的连续数据在其它维度里。不相邻

所以第一种方式,cpu请求内存1024次。第二种方式1024*6次。

优化1:空间局部性优化:尽量把代码程序,相加的数据,让它连续。  减少cpu请求内存

优化2:时间局部性:同一个变量加载多次,尽量先提前使用。,防止cpu清除缓存中的变量,再次请求cpu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值