贾喜存

导航

 

原文:http://antirobotrobot.tumblr.com/post/17138289530/the-software-stack-and-latency

The Software Stack and Latency

  我喜欢玩《宇宙缩放》游戏。它可以让你从原子到星系的宇宙中比较对象的大小。我在考虑不同大小的对象对应不同的专业,以及这些行业应用不同的工具。粒子物理学家的工具就是粒子加速器,化学家的工具是烧杯和酒精灯,伐木工的工具是一把斧头,飞行员的工具是飞机,天体物理学家的工具是一个望远镜。

  软件中,我们不处理空间的物理对象。长度不是软件编程需要讨论的指标,而时间才是关键的测量要素。延时成为分级系统中最具描述性的指标之一。软件延时与长度相比,应该是对数量级上。他们数量级可以从纳秒(10的负9次方,一秒钟的十亿分之一)到小时(10的5次方,一万秒)。

  一纳秒在1Ghz的处理器上是一个时钟周期。一级缓存的一次查找只需要三个时钟周期,而二级缓存需要14个。DRAM大约需要500纳秒。网络节点响应HTTP请求的时间不到一毫秒。读磁盘需要花费几毫秒(或者更糟,时间更长)。从美国东海岸ping到西海岸的时间是60毫秒,下载一部电影可能要几小时,渲染可能需要数天。

  “软件组”是不同数量级的延迟在编程平台的具体表现。在纳秒级,我可选择x86_64CPU指令集。在微秒级我们有Linux和C。在毫秒级,我们有多种动态编程语言。

  对不同的目标有不同的软件。如果要快速建一个网络服务器,在笔记本电脑(Darwin, X86_64)上运行Node.js是个不错的选择。对于运行的生产节点来说,微秒级的智能系统(SmartOS)是更好的选择。但是,如果你要在Android上运行程序,你的选择可能是ARM,Linux和Java。

  软件工程师开发根据不同的延时有不同的工具选择。他们通常根据使用的平台决定什么样的延时。网络开发者通常不会离开动态语言—微秒级的。建设网站(一个网络开发平台),我从来不需要具体的CPU架构,但用C实现的一些与操作系统打交道的模块则必须要考虑。内核工程师必须对CPU,总线和外设有足够的了解。

  用各种软件,从浏览器,到POSIX,再到设备驱动程序,人们可以更强地控制操作系统。

  不同层次的人们往往互相不理解对方。较慢看着较快的,他们就像纤细的bit tweddlers,过早优化一切。较快看着较慢的,他们看起来像懒惰笨拙的树懒,为了自己的编程经验,花费大量不可想象的时间。


Definition of: software stack 

(1) A set of programs that work together to produce a result; for example, an operating system and its applications. It may refer to any group of applications that work in sequence toward a common result or to any set of utilities or routines that work as a group. See stack.

(2) A list of addresses or calculations that is implemented in memory rather than in hardware registers. See stack.


posted on 2012-02-15 21:46  贾喜存  阅读(143)  评论(0)    收藏  举报