缓存的数据可以放在那里呢?一般来说有这么几种,static变量,.NET类库提供的HttpRuntime.Cache或者就是一些分布式的缓存解决方案,比如memcached。
有一些误解,很多人非常不喜欢static变量,我想有两个原因,一是可能觉得把100M数据存放到一个变量中,这是很可怕的事情,一个变量竟然占用100M内存,其实我们大多时候缓存的是一个引用类型,变量存放的只是一个指针罢了,100M的值类型确实可怕,二是很多做ASP.NET的人会觉得不能乱用static变量,就产生了这个错觉。其实,我觉得static变量的问题在于它没有线程安全的机制,二是它作为缓存方案不能过期,一旦创建后也不能删除,只能把它设置为空引用,等待GC回收。但对于某些情况,静态变量是适合的,比如我们缓存的数据是只读并且永远不需要过期的,静态变量作为缓存的确足够简单,也不用担心“丢失”!
HttpRuntime.Cache
之类的方案的优势在于它提供了过期、依赖、线程同步的支持,也是我们用的最多的。
最后说说分布式缓存解决方案,比如memcached。其实我觉得在一般情况下不要去随便使用分布式的缓存方案,除非我们能满足以下的需求:1、缓存的数据非常多,一台机器的内存不够用,确实需要分布。2、需要确保数据不能丢失,在多台机器上做备份。为什么说不要轻易用,因为分布是有代价的,如果应用服务器和缓存服务器分开的话,势必就需要TCP通讯,这是一个消耗,另外一个消耗是缓存的数据需要序列化和反序列化。分布式缓存使用缓存一些直接能绑定到UI的数据,或者说直接用于呈现的数据,对于大块的数据非常不适合存放到memcached中。比如之前提到的List<string>,如果这个数据是100M,它不能直接用需要做一些计算再返回给WEB服务器,那么我们做的事情就是序列化后缓存到memcached中,然后再反序列化从TCP获取,放到内存中计算后返回给WEB服务器,然后内存中的100M数据等待GC回收。其中白白折腾了网络、CPU和内存(虽然会回收,但是GC一直回收100M的数据,谁受得了)。
上面的例子我想说明一个问题,缓存的方案需要根据应用来选择,静态变量不一定不好,分布式缓存也不一定好
。
最后,还有一个有关CPU占用的有趣问题,很多人很怕服务器占用CPU很高,觉得CPU占用一高就有性能问题。其实我想说的是,有的时候CPU占用的高不一定是坏事情。假设有两个网站。A网站它的数据源是数据库,每一个请求(假设是同步请求数据库)都需要1秒来从数据库获取数据,由于IO操作的时间会比CPU处理数据时间长很多,所以这个网站即使很繁忙,WEB服务器的CPU占用还不是很高,用户一个页面打开至少要等1秒,网站管理员看着WEB服务器CPU常年处理20%的情况觉得很满意,但想想这真能说明网站性能高吗?还有一个网站B,它数据都是从内存中读取的,由于内存的操作会比IO操作快很多,CPU处理一个请求的数据只需要20毫秒,由于网站页面速度快,用户满意度和数量比A网站高很多,CPU很忙,常年处于90%的负荷,网站管理员看了觉得很害怕,是不是哪里出现性能问题了,服务器会不会瘫痪。其实,我觉得B网站的管理员应该高兴,因为B网站的用户比A网站高一个数量级,服务器虽然很忙,但页面打开速度很快,CPU得到了充分的利用。
上面的例子我想说明一个问题,只要不是死循环等恶性代码问题的话,CPU如果占用的高不一定就是坏事情
。
分享到:
相关推荐
常见的CPU缓存有三级:L1、L2和L3。 - **L1 Cache**:最接近CPU核心,速度最快但容量最小。分为数据缓存(L1d)和指令缓存(L1i)。 - **L2 Cache**:比L1缓存大,速度稍慢,为整个CPU核心共享。 - **L3 Cache**:...
CPU缓存,特别是二级缓存(L2 Cache),在提升IPC方面扮演着重要角色。缓存的存在是为了弥补CPU运算速度与内存速度之间的差距,通过存储即将被CPU访问的数据,减少对较慢内存的依赖,从而提高执行速度。L2 Cache的...
本文将详细探讨CPU缓存的重要性、其工作原理以及如何通过优化代码来充分利用缓存的优势。 #### 一、缓存的基本概念 缓存是一种小型快速存储器,用于暂时存储频繁访问的数据或指令。在现代计算机体系结构中,缓存被...
本文主要是关于二极缓存的介绍,并阐述了二级缓存是否损坏的查看方法,并探讨了二级缓存对CPU性能的影响。二级缓存二级缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理...
本文将探讨“cpp-CJAG”项目,它关注的是两个位于同一物理位置的虚拟机之间如何利用CPU缓存进行高效通信。 标题中的"cpp-CJAG"可能是一个开源项目或研究,专注于使用C++编程语言来实现CPU缓存通信机制。C++是一种...
本文将深入探讨CPU缓存架构及其对系统性能的影响,并详细解析高性能内存队列——Disruptor的实际应用。 首先,让我们来了解一下CPU缓存。CPU缓存是计算机硬件中的一个关键组成部分,它位于CPU和主内存之间,用于...
《深入CPU缓存的世界》是一本探讨CPU高速缓存的专业指南,旨在帮助读者理解这个对计算机性能至关重要的组件。CPU缓存,源自法语“cache”,意为隐藏珍贵物品的地方,它在计算机中扮演的角色正是存储频繁访问的数据,...
浅谈CPU二级缓存容量”指的是探讨现代计算机处理器中的二级缓存(L2 Cache)对于整体性能的影响。本文主要围绕CPU二级缓存的作用、工作原理以及不同厂商(Intel和AMD)的处理器如何处理一级和二级缓存之间的数据...
一级缓存(L1 Cache)和二级缓存(L2 Cache)是CPU内部的重要组成部分,它们位于主内存和CPU核心之间,扮演着数据快速访问的角色。本文将深入探讨这两个级别的缓存系统,以及它们在优化计算性能中的作用。 首先,一...
在深入探讨它们的CPU和缓存信息之前,我们首先理解一下这些组件在存储系统中的关键作用。 CPU(中央处理器)是任何计算设备的大脑,负责执行指令并控制硬件操作。在存储设备中,CPU负责处理数据的读写请求,管理...
MESI协议,代表修改(Modified)、独享(Exclusive)、共享(Shared)和无效(Invalid)四种状态,是维护多核CPU缓存一致性的基石。文章首先解释了CPU高速缓存的必要性,揭示了其对提高处理速度的关键作用,特别是在处理器和...
在本文中,我们将深入探讨二级缓存的作用、不同CPU之间的差异以及为何Intel和AMD的CPU在二级缓存大小上有明显区别。 首先,了解缓存的基本原理是理解CPU性能的关键。缓存系统遵循“就近原则”,即CPU首先尝试从一级...
这种思想源自于计算机体系结构中的层次存储模型,从高速缓存(如CPU缓存)到内存,再到硬盘,速度和容量依次递减。 缓存主要分为硬件缓存和软件缓存两大类。硬件缓存,如CPU的L1、L2、L3缓存,是由硬件自动管理的,...
缓存大小和速度对处理器性能有显著影响,CPU-Z能显示各级缓存的容量和时序。 三、主板 主板是连接所有硬件组件的平台,包括CPU、内存插槽、显卡插槽等。主板的芯片组决定了其支持的CPU类型、内存速度以及扩展能力。...
总结题目的练习题可能涵盖这些知识点,例如:CPU的组成、存储器的分类和特点、CPU与存储器之间的通信方式、高速缓存的工作原理、以及存储器层次结构对性能的影响等。通过解答这些题目,可以巩固和深化对CPU和存储器...
常见的缓存层次包括CPU缓存、内存缓存以及分布式缓存(如Redis、Memcached等)。这里我们主要关注程序中如何读取和设置缓存。 `CacheExample.java`可能是包含缓存操作示例的代码文件。通常,一个简单的缓存操作会...
硬件检测工具是IT领域中非常实用的一类软件,它们能够帮助用户了解计算机内部的各种硬件信息,包括主板、CPU、内存和缓存等关键组件。在本文中,我们将深入探讨这些硬件组件及其检测的重要性,以及如何利用CPU-Z这样...
本文将从 GPU 缓存机制的设计理念、 histoire 发展、当前状态和未来趋势等方面进行探讨。 首先,咱们来看一下 CPU 的缓存机制。CPU 的缓存机制是为了解决访存时延的问题,提高 CPU 的执行效率。CPU 的缓存机制可以...
- **适用性探讨**:探讨缓存一致性算法在不同工作负载和硬件配置下的适用性。 ##### 实验环境 - **硬件平台**:采用多核处理器的计算机系统,确保支持多缓存一致性协议。 - **软件平台**:操作系统支持多线程和多...
本文将详细探讨“CPU查看工具”及其功能,以及如何利用它来获取关于CPU、内存和主板的关键信息。 CPU是计算机的“大脑”,负责执行所有计算和逻辑操作。了解CPU的类型、型号、指令集以及核心数等特性,有助于优化...