每个程序员都应该了解的内存知识(开篇)
2015-12-31 15:49
786 查看
注:本文多数内容来自对What Every Programmer Should Know About Memory一文的理解和翻译。但这不是一篇严格的译文,只摘取我读了有心得的部分,并尽量加上自己的理解和自己收集的资料。
计算机系统的几大部件都凝聚了工程师的心血,并有很多优秀的工程师一直工作在优化这些部件上。很快,各个部件的工作能力就出现了差距,其中尤以内存和外存为甚,受限于价格的因素,内存外存的工作能力被CPU远远的落在了后面。这样一来,计算及系统就存在短板效应,CPU空有飞速的计算速度,却不能带动整个计算机系统的工作能力。
外存瓶颈的解决,多是通过软件技术来做缓存。
操作系统实现了针对外存的缓存,保存经常读写的数据在内存中;
存储系统也被内置到外存设备中,比如磁盘控制器中,这样即便没有操作系统缓存存在的情况下,也能提升整体性能。
遗憾的是,内存存取瓶颈的解决,要比外存瓶颈的解决难得多,并且几乎所有的解决方案,都需要改动硬件。这些为改善内存瓶颈而对硬件的改动,主要包含以下几种:
内存的硬件结构设计(体现在速度和并发上);
内存控制器的设计;
CPU缓存;
设备直接内存访问(DMA)。
每个程序员都应该了解的内存知识(CPU Cache篇)介绍CPU缓存的相关技术;
每个程序员都应该了解的内存知识(Virtual Memory篇)介绍虚拟内存技术;
每个程序员都应该了解的内存知识(NUMA篇)介绍非统一内存访问架构;
每个程序员都应该了解的内存知识(编程篇)介绍如何利用内存知识来优化自己的程序;
每个程序员都应该了解的内存知识(工具篇)介绍几个可以用来辅助分析程序内存使用的工具;
开篇
早期计算机系统的架构要比现在的简单多了,CPU、内存、外存、网卡等几个重要部件一组合就成了鼎鼎大名的计算机。每个部件自身结构相对简单,各部件的工作能力也旗鼓相当,它们按照冯诺依曼体系结构协调工作在一起,十分协调融洽。说是早期,其实计算机技术的发展日新月异,也就是几十年前吧。计算机系统的几大部件都凝聚了工程师的心血,并有很多优秀的工程师一直工作在优化这些部件上。很快,各个部件的工作能力就出现了差距,其中尤以内存和外存为甚,受限于价格的因素,内存外存的工作能力被CPU远远的落在了后面。这样一来,计算及系统就存在短板效应,CPU空有飞速的计算速度,却不能带动整个计算机系统的工作能力。
外存瓶颈的解决,多是通过软件技术来做缓存。
操作系统实现了针对外存的缓存,保存经常读写的数据在内存中;
存储系统也被内置到外存设备中,比如磁盘控制器中,这样即便没有操作系统缓存存在的情况下,也能提升整体性能。
遗憾的是,内存存取瓶颈的解决,要比外存瓶颈的解决难得多,并且几乎所有的解决方案,都需要改动硬件。这些为改善内存瓶颈而对硬件的改动,主要包含以下几种:
内存的硬件结构设计(体现在速度和并发上);
内存控制器的设计;
CPU缓存;
设备直接内存访问(DMA)。
后续内容预告
每个程序员都应该了解的内存知识(RAM篇)介绍随机访问内存(RAM)的技术细节;每个程序员都应该了解的内存知识(CPU Cache篇)介绍CPU缓存的相关技术;
每个程序员都应该了解的内存知识(Virtual Memory篇)介绍虚拟内存技术;
每个程序员都应该了解的内存知识(NUMA篇)介绍非统一内存访问架构;
每个程序员都应该了解的内存知识(编程篇)介绍如何利用内存知识来优化自己的程序;
每个程序员都应该了解的内存知识(工具篇)介绍几个可以用来辅助分析程序内存使用的工具;
相关文章推荐
- 论一个职业讲师的自我修养
- 程序员关于提高工作效率
- 编程范式,程序员的编程世界观
- java面试题
- PHP程序员的技术成长规划
- 操作系统常见的面试题
- 面试干货——年底干货大放送,你准备好了吗?(转)
- 【job】面试中常见的笔试梳理
- SQL Server DBA面试知识点(七)-- 锁
- 百度面试经验之谈 ----------转
- 我是如何准备Google面试的
- 程序员如何提高影响力:手把手教你塑造个人品牌
- SQL Server DBA面试知识点(六)-- 表join
- 前端工程师面试(笔试)题
- 黑马程序员——多线程的基础知识
- 黑马程序员——IO流及其他常见流
- 黑马程序员——异常
- iOS面试题12- RunLoop是什么?
- 12 个让项目经理比程序员更痛苦的问题
- 职业建议