Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >什么是“缓存友好”的代码?

什么是“缓存友好”的代码?

提问于 2017-12-18 04:39:49
回答 2关注 0查看 768

“缓存不友好的代码”和“缓存友好的”代码有什么区别?

我怎样才能确保我编写缓存友好的代码?

回答 2

嗨喽你好

发布于 2017-12-18 05:23:46

我认为缓存不友好代码的一个有启发意义的典型例子是代码扫描C二维数组(例如位图图像)列而不是行方式的代码。

在一行中相邻的元素在内存中也是相邻的,因此按顺序访问它们意味着以上升的内存顺序访问它们; 这是缓存友好的,因为缓存倾向于预取连续的内存块。

相反,以列方式访问这些元素是缓存不友好的,因为同一列上的元素彼此之间的内存距离较远(特别是它们的距离等于行的大小),所以当你使用这种访​​问模式时在内存中跳跃,可能会浪费在附近的内存中检索元素缓存的努力。

而所有这一切都是为了毁掉这个表演

代码语言:txt
AI代码解释
复制
// Cache-friendly version - processes pixels which are adjacent in memory
代码语言:txt
AI代码解释
复制
for(unsigned int y=0; y<height; ++y)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    for(unsigned int x=0; x<width; ++x)
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        ... image[y][x] ...
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

代码语言:txt
AI代码解释
复制
// Cache-unfriendly version - jumps around in memory for no good reason
代码语言:txt
AI代码解释
复制
for(unsigned int x=0; x<width; ++x)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    for(unsigned int y=0; y<height; ++y)
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        ... image[y][x] ...
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

在小缓存和/或大阵列(例如当前机器上的10+百万像素24bpp图像)的系统中,这种效果可能相当戏剧化(几个数量级的速度); 因此,如果必须进行多次垂直扫描,通常最好先旋转90度的图像,稍后再执行各种分析,将缓存不友好的代码限制为旋转。

秋之夕颜清

发布于 2017-12-18 05:22:21

先了解什么是缓冲区溢出 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是 程序检查数据...

和开发者交流更多问题细节吧,去 写回答
相关文章
对缓存的思考【续】——编写高速缓存友好代码
开篇 上一篇博文对缓存的思考——提高命中率详细介绍了高速缓存的组织结构,并通过实例说详细明了cpu从高速缓存中取数据的过程,对于缓存的工作机制应该有了清晰的认识。这篇博文就来简单讨论以下对于缓存在实际开发中的应用,这里将告诉你如何让你的程序充分利用该缓存,即如何编写高速缓存友好的代码。 提示:如果高速缓存的运行机制还没有清晰的认识,请参照前面文章。 注1:关于文中提到的局部性的相关知识参照:局部性原理浅析——良好代码的基本素质 注2:这是一个系列的文章,收录在 程序性能优化 注3:文章知识有些地方不容易理解
猿人谷
2018/01/17
1K0
对缓存的思考【续】——编写高速缓存友好代码
为什么CPU缓存对数组友好而对链表不友好
为什么CPU缓存对数组友好而对链表不友好,去遍历相同的链表和数组 通过时间复杂度分析的话都是 O(n)。所以按道理是差不多的 但是在实践中, 这2者却有极大的差异。 通过下面的分析你会发现, 其实数组比链表要快很多。 首先介绍一个概念:memory hierarchy (存储层次结构),电脑中存在多种不同的存储器,如下表 CPU 寄存器 – immediate access (0-1个CPU时钟周期) CPU L1 缓存 – fast access (3个CPU时钟周期) CPU L2 缓存 – slightly slower access (10个CPU时钟周期) 内存 (RAM) – slow access (100个CPU时钟周期) 硬盘 (file system) – very slow (10,000,000个CPU时钟周期) (数据来自 http://www.answers.com/topic/locality-of-reference)
袁新栋-jeff.yuan
2020/08/26
8790
为什么DirectBuffer是IO友好的
我们经常会听到,Java nio中的direct buffer对io更加友好些,但为什么呢?
KINGYT
2023/03/15
5140
为什么DirectBuffer是IO友好的
什么是cdn缓存 cdn缓存要注意什么
众所周知,cdn技术的出现能够让网络技术得到飞速的进步,当今的社会是一个互联网的社会,如果人们离开了互联网将会寸步难行。当然互联网技术的发展对于一个国家和社会都拥有着巨大的意义。cdn技术是目前非常先进的网络技术,cdn技术能够有效缓解网络波动和网络数据传输卡顿的问题。但大家对于cdn缓存不是很了解,下面就讲解什么是cdn缓存。
用户8715145
2021/09/18
4.2K0
什么是cdn缓存 cdn缓存要注意什么
什么是Spring的缓存抽象?
你负责的项目需要一个功能,但是这个负责实现这个功能却不是你,很可能是第三方厂商给你的一个服务。
凯哥的Java技术活
2022/07/08
4110
什么是Spring的缓存抽象?
什么是符合搜索引擎友好的网站设计?
如果我们从搜索引擎蜘蛛的角度去看一个网站,在抓取、索引和排名时会出现一系列问题,解决了这些问题的网站设计就是对搜索引擎友好的网站。
茹莱神兽
2022/04/03
4830
什么是符合搜索引擎友好的网站设计?
Redis中,什么是缓存击穿、缓存穿透、缓存雪崩
缓存是互联网开发中必不可少的一部分,它能降低我们数据库的并发数,提高我们系统的性能,比如我们经常使用的redis、emCached等等,其中redis应该是大部分的人选,为什么?因为速度快,易上手,是很多开发者的首选,但是缓存同样存在着问题,如果使用的不恰当,也可能会造成非常严重的后果,这时候你可能就会有疑问,缓存只是存储一些数据而已,怎么会造成严重的后果呢?下面我就带大家一起来分析分析。
李昂君
2021/12/24
7470
Redis中,什么是缓存击穿、缓存穿透、缓存雪崩
什么是Redis缓存雪崩、缓存穿透和缓存击穿?
什么是Redis缓存雪崩、缓存穿透、缓存击穿?关于这个问题至少有20位以上的粉丝咨询过我。这确实是一道互联网大厂的高频面试题。今天,我给大家来聊一聊。
Tom弹架构
2022/08/22
3580
什么是Redis缓存雪崩、缓存穿透和缓存击穿?
聊聊什么是缓存雪崩和缓存穿透
假如一个系统,它在高峰期有每秒7000个请求,这时我们使用缓存抗住了这么高的请求。但如果在某个时间点缓存大量失效,或者缓存服务器挂掉了,那么这些请求就会直接作用在普通数据库中(如MySQL)。这么高的请求量,MySQL肯定抗不住,进而挂掉,数据库一挂,也会导致系统挂掉。
Lvshen
2022/05/05
3360
聊聊什么是缓存雪崩和缓存穿透
什么是缓存雪崩、缓存穿透、缓存击穿?怎么解决?
缓存雪崩就是Redis的大量热点数据同时过期(失效),因为设置了相同的过期时间,刚好这个时候Redis请求的并发量又很大,就会导致所有的请求落到数据库。
向着百万年薪努力的小赵
2022/12/02
5610
什么是Redis缓存穿透、缓存雪崩和缓存预热
原理:缓存穿透(击穿)是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,数据库的压力骤增(可能会宕机)。
会呼吸的Coder
2020/02/17
9060
什么是缓存击穿、缓存穿透、缓存雪崩?如何解决?
概念:指缓存和数据库中都没有用户想要查询到的数据,并且不断进行请求,造成数据库承载部分压力。
闫同学
2022/10/31
5160
什么是缓存击穿、缓存穿透、缓存雪崩?如何解决?
项目中缓存是如何使用的?为什么要用缓存?
假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办?
IT技术小咖
2019/11/22
1.4K0
对缓存击穿的一点思考前言什么是缓存击穿?避免缓存击穿的思路分析代码抽象
缓存(内存 or Memcached or Redis.....)在互联网项目中广泛应用,本篇博客将讨论下缓存击穿这一个话题,涵盖缓存击穿的现象、解决的思路、以及通过代码抽象方式来处理缓存击穿。
用户2890438
2018/08/20
7350
什么是缓存击穿、雪崩、穿透
随着互联网的越来越普及,用户越来越多,系统性能瓶颈成了越来越热门的话题。要解决性能问题的技术手段有很多,比如:缓存、CDN加速、页面静态化、集群、分布式、异步等。
苏三说技术
2020/10/15
3590
什么是缓存击穿、雪崩、穿透
什么是缓存雪崩、击穿、穿透?
用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。
全栈程序员站长
2022/09/12
4840
什么是缓存雪崩、击穿、穿透?
写一些友好的代码(上),对人友好
正文之前,还是想强调一下今天关于编码的分享,要 区别 “好” 与 “友好”。毕竟还是有差距。就像好的论文、好的书籍,专业性很强,内容质量很高。但它并不一定是友好的,就像现在大多数人在写作都在追求 “通俗易懂”,这就是友好。他们这些人负责把难理解的内容消化掉然后换一种方式来表述出来,同时尽可能的不丢失原来的“本色”。这样的内容就是友好的,同时它也一定是好的。(这个一定,可以通过反证法得出)
星尘的一个朋友
2021/03/23
5130
写一些友好的代码(上),对人友好
什么是缓存置换算法?
前面的文章已经介绍了什么是操作系统的虚拟内存,与本文要介绍的缓存置换算法息息相关,如果还没有看的朋友,建议先读一下上篇文章,链接是:什么是操作系统的虚拟内存?
我是攻城师
2019/07/19
1.8K0
什么是整洁的代码
来源 | https://www.cnblogs.com/xybaby/p/11335829.html
五分钟学算法
2019/08/20
5290
什么是整洁的代码
什么是缓存的局部性原理?
了解计算机的存储结构,对我们编写优秀的程序很有帮助,虽然计算机的内部对我们来说是透明的,但是如果我们能多了解一些计算机的运行机制,对我们编写高效的程序大有好处。
zhanyd
2022/05/16
4870
什么是缓存的局部性原理?

相似问题

redis中什么是缓存击穿?该如何解决?

095

怎么区分资源是浏览器缓存的还是CDN节点缓存的?

1248

为什么我的Python代码输出的数据是竖着的?

0367

redis缓存策略到底是如何?

1598
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档