赞
踩
场景:
操作策略:
这些节省内存空间的方法,一般都需要付出时间的代价。
关于压缩算法的选取,基本上看三个指标:压缩比例、压缩速度、使用内存
注意,这里的“空间换时间”和后面的缓存策略不同。一般“缓存”使用的空间,和原来的空间不再同一个层次上,添加的缓存往往比原来的空间高出一个档次。而这里的“空间换时间”策略,里面的“空间”是和原来的空间相似的空间。
场景:
场景:
所谓“惰性处理”,就是尽量将操作推迟到必须执行的时刻,这样很可能避免多余的操作,甚至根本不用操作。
场景: COW(Copy On Write,写时复制):
COW应用例子:
异步和并行操作虽然看起来很不一样,其实有异曲同工之妙,就是都把一条流水线和处理过程分成了几条,不管是物理上分还是逻辑上分
并行是一种物理上把一条流水线分成好几条的策略。
直观上说,一个人干不完的活,那就多找几个人来干。并行操作即增加了系统的吞吐量,又减少了用户的平均时间。比如现代的CPU都有很多核,每个核上都可以独立的运行线程,这就是并行操作。
并行操作需要我们的程序有扩展性,不能扩展的程序,就无法进行并行处理。这里的并行概念有不同的粒度,比如服务器粒度(所谓的横向扩展)。还是在多线程的粒度,甚至是在指令级别的粒度。
绝大多数互联网的服务,要么使用多进程,要么使用多线程来处理用户的请求,以充分利用多核CPU。另一只能够情况是在有IO阻塞的地方,也是非常适合使用多线程并行操作的,因为这种情况CPU基本是空闲状态,多线程可以让CPU多干点活。
异步操作是一种逻辑上把一条流水线分成几条的策略。
缓存的本质是加速访问。这是一个用得非常普遍的策略,几乎体现在计算机系统里面每一个模块和领域,CPU、内存、文件系统、存储系统、内容分布、数据库等等,都会遵循这样的策略。比如:
在有IO(比如网络IO和磁盘IO)的时候,合并操作和批量操作往往能够提升吞吐量,提高性能。
这两个策略是紧密配合的,比如先进的算法有时候会需要先进的数据结构;而且它们往往和程序的设计代码直接相关
同一个问题,肯定会有不同的算法实现,进而就会有不同的性能
对每一种具体的场景(包括输入集合大小、时间空间的要求、数据的大小分布等),总会有一种算法是最适合的。我们需要考虑实际情况,来选择这一最优的算法。
没有一个数据结构是在所有情况下都是最好的。我们要权衡取舍,找出实际场合下最适合的高效的数据结构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。