局限性原理:
(计算机/软件开发的一些原理和规律)
局部性原理这个原理讲的是在一段时间里, 整个程序的执行仅限于程序的某一个部分, 相应的, 程序访问的存储空间也局限于某一个内存区域, 具体分为:
时间局部性:
是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行; 如果某数据被访问,则不久之后该数据可能再次被访问。
空间局部性:
是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。
坐飞机的怎么和坐驴车的打交道: 缓存为什么需要缓存(Cache)?
本质的原因是速度的不匹配。 CPU比内存快100多倍, 比硬盘快1000多万倍。
如果CPU每次做事的时候, 都等着内存和硬盘, 那整个计算机的速度估计要慢的要死了。
所以根据局部性原理, 操作系统会把经常需要用的数据从硬盘取到内存, CPU 会把经常用的数据从内存取到自己的缓存中。 (参见文章《CPU阿甘》)通过这种办法等待的问题能带到极大的缓解。
在Web 开发中,缓存更是非常常见的, 由于数据库(硬盘)太慢, 大部分Web系统都会把最常用的业务数据放到内存中缓存起来。
抛弃细节: 抽象抽象是计算机科学中最为重要的概念之一
《深入理解计算机系统》一书中提到:
“指令集是对CPU的抽象, 文件是对输入/输出设备的抽象, 虚拟存储器是对程序存储的抽象, 进程是对一个正在运行的程序的抽象, 而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。”— 总结的非常精辟
当我们遇到复杂问题的时候, 抽象是非常重要的武器
我怕等不及(异步调用):
异步调用当你的程序需要等待一个长时间的操作而被阻塞住时而无所事事的时候, 异步调用就派上用场了。
异步调用简单就是说: 我等不及你了, 先去做别的事情, 你做完了告诉我一声。
(Node.js 和 Web服务器Nginx 也是这样, 一个线程或若干个线程处理所有的请求, 遇到耗时的操作, 绝不等待, 马上去干别的事情,等到耗时操作完成后,再来通知这些干活的线程)
(著名的AJAX , 当浏览器中的javascript发出一个Http 请求的时候, 也不会等待从服务器端返回数据, 只是设置一个回调函数, 服务器响应数据回来的时候调用一下就行了。)
原文链接:码农需要知道的潜规则