内存密集型应用程序或需要大量内存的应用程序受到以下限制:
- 处理器外的 RAM 速度
- 处理器内部缓存的速度
- 共享内存总线的实体数量
- 虚拟内存
不幸的是,这些限制并不是程序性能的主要因素。更大的影响是: CPU 的数量、I/O 操作和与您的程序一起运行的其他任务。更改这些项目将影响您的程序,而不是更改影响内存带宽的项目。
1. 处理器外 RAM 的速度
处理器必须跳出其外壳并从 RAM 中获取指令和数据。RAM 具有不同的速度,它可以访问单元并将位返回给处理器。通常,这以 Hz 为单位进行标记。内存越快,您的进程花费在加载指令和数据上的时间就越少,程序执行的速度就越快。
注意:将内存速度提高到超出处理器能力不会提高性能。它将瓶颈从 RAM 更改为处理器。另见#3。
2. 处理器内部缓存的速度
缓存内存驻留在处理器的外壳内。这是可用的最快的内存类型之一。处理器将在搜索 RAM 之前搜索此内存。提高此内存的速度和数量将提高处理器的性能,除非其他内核也在访问此内存。对于访问内存的多个内核,需要解决冲突,这可能会降低您的应用程序性能。
注意:除了获得另一个处理器之外,您无法加快或更改高速缓存的大小。缓存不是人类或机器手可以轻易更改的东西。
3. 共享内存总线的实体数量
内存总线就像实体用来到达 RAM 的高速公路。与高速公路一样,更多的车道意味着更快的吞吐量(例如 16 位宽度与 32 位宽度)。许多公共汽车也有速度限制,同样限制越高,访问速度越快。可能最值得注意的概念是连接到总线的实体数量。与高速公路一样,更多的用户会减慢交通速度。在大多数内存总线中,一次只能使用一个实体;其他实体必须等待。减少需要使用内存总线的实体数量将加快您的程序。
共享内存总线的一些常见实体:CPU、DMA 控制器、视频处理器、声音处理器和网络或 I/O 处理器。
4. 虚拟内存。
许多现代计算机使用虚拟内存。如果程序需要的内存多于 RAM 中的可用内存,则操作系统会将内存部分与硬盘驱动器上的区域交换。这比降低内存运行速度要花费更多的性能时间。内存密集型程序仅使用分配给它的内存比它可能需要的所有内存更有效。减少这些虚拟内存交换将加速程序。
总之,您的应用程序可以执行的最大速度。内存,内部缓存和外部 RAM,都是影响上限的因素。有更大的因素会阻止应用程序达到此限制。其中一些因素是 I/O 操作和其他并发任务。程序的设计和实施也可能导致缓慢。与更改内存访问速度的上限相比,消除 I/O 操作、并发任务和重新设计软件可以获得更高的性能。更改这些限制会提高程序的性能,但不会像其他技术那样剧烈。