Snow Leopard Ars Technica Review 摘要

每次Mac OS X升级, Ars Technica都会有一个长篇的评论, 这次也不例外, 有23页之长. 原文在此. 边看边将我比较感兴趣的部分摘要了一下.

Snow Leopard是一次主要针对开发者的升级, 预告时就打出了0 feature的噱头, 最终用户能体验到的变化也许不多.

安装

安装大小有比较显著的变化, 比Leopard小很多. 排除Finder采用十进制方式展示空间大小的原因, 真正节约了空间的地方包括:

  • 可运行码中不再有PPC部分.
  • 很多文件采用了压缩模式, 利用extended attributes, 以ResourceFork的形式保存. 从之前版本的Mac OS X会是一个0大小的文件, 但在文件拷贝的层面做到了向前兼容.
  • 对于更小的文件, 会直接保存在extended attributes中, 而不再单独分配一个块(通常是4K).
  • 压缩存放文件, 一方面是节约了硬盘, 另一方面以CPU换I/O. 将内容存放在extended attributes中, 可以减少硬盘磁头的移动. 一切都是为了更快的读写速度.

安装过程中过检查不兼容的程序.另外, 安装增加了掉电保护功能.

64位

一图顶万言

64位内核

K64(64位内核)并没有在所有的系统上被激活, 目前缺省激活的只有08以后的XServers. 要想在其他K64-capable的机器上启动64位内核, 需要在启动时同时按下6和4两个键. 或者用nvram直接修改启动配置.

64位内核最直接的好处是可以使用更大的内存. 更多的寄存器, 新的寻址方式和浮点运算能力对性能提升有帮助, 但只有少数程序(通常是server-based的程序)用到了这些特性, 对更多的日常应用而言, K64没有你想象中那么有用.

对于安装了96GB内存,并且不存在32位驱动程序困扰的人, K64是首选.

雪豹的32位内核同样支持64位应用, 在不耗尽内核地址空间的前提下, 不妨碍使用超过4G内存.

雪豹中64位应用明显增多,大量新API不再支持32位, Objective-2.1的很多新功能也只能用于64位应用程序.

苹果在用自己的行动拉拢大家进入64位阵营.

QuickTime X

X means ‘Ten’. 目标是淘汰已经18年之久的老QuickTime API. 但只是一个开始.

QuickTime X是纯64位. 部分功能仍依赖于32位的QuickTime 7. 通过启动一个独立的32位QTKitServer进程来完成64位应用对32位应用的使用.

QuickTime X API提供比之前更合理的资源使用方式, 只做你需要它做的事情. 对部分显卡支持GPU加速播放H.264.

文件系统API

用NSURL和CFURL统一文件引用.

引入Bookmark.

Do more with more

我们的硬件越来越好, 但运行速度并没有明显的改观, 原因之一是软件开发并没有充分利用这些提升. 雪豹的目标之一就是让开发者可以享受到硬件提升带来的好处, 在更好的条件下做到更多.

LLVM和Clang

隆重推出LLVM和Clang. 可以采用GCC, LLVM-GCC, Clang等多种编译方式. 在对特定硬件的优化上, LLVM比传统编译方式更具优势.

LLVM和Clang的组合, 编译速度更快, 编译出的可执行代码运行速度更快. 更友好的错误提示. 支持代码静态分析.

Blocks

Blocks的支持, 使C++, C, Objective-C也可以拥有过去只属于动态语言的closures和anonymous functions的特性.

不同于函数指针, Blocks提供更灵活的参数传递和变量上下文方式. 和真正的动态语言相比, 仍然有所限制, 需要遵守一系列规则.

Grand Central Dispatch

简称GCD, 是雪豹提供的新的基于C语言的并发运行机制.

通常,应用程序很难根据CPU的数量和使用情况来控制线程的数量. 多了, 增加调度成本. 少了, CPU闲置.

GCD提供统一的线程调度机制. 应用程序将任务放入GCD的任务队列, GCD根据硬件的具体情况产生数量合理的线程, 将任务逐个发送到这些线程中并发运行. 无论是双核还是八核, 同样的程序通过GCD可以充分利用硬件资源, 硬件升级对应用程序透明. GCD线程池中的线程被队列中的任务不断重用, GCD队列比线程更轻, overhead更小(512KB vs 256B).

异步

尽管有GCD, 我们仍然面对数据共享, 锁等等同步问题的困扰. Apple通过GCD, 鼓励开发者用一种异步的思想来解决同步问题,将程序分成主线程和完成繁重工作的工作线程.

GCD队列中的任务,实际是通过Blocks来实现的, 可以将运行单位限制在很小的范围内,更容易控制运行上下文, 同时也很容易将本来有同步问题的代码送回主线程来完成.

GCD让异步运行和充分利用CPU变得前所未有的简单.

OpenCL

OpenCL是有关于如何充分利用GPU. 苹果希望通过OpenCL, 将一些适合与在GPU上做的运算,比如一些矢量运算,交给GPU. 基于现实的考虑, 苹果在设计OpenCL时, 并没有限定OpenCL程序只运行在GPU上, CPU也可以作为可选设备之一, 扩大了OpenCL的使用场景.

OpenCL对上层统一接口, 却可以根据底层不同硬件做实时优化, 完全是依赖于LLVM强大的JIT编译能力. OpenCL还使用了GCD来处理任务并行.

到此, 雪豹已经将硬件能力挖掘的淋漓尽致.

其它

Input Managers, SIMBL plug-ins不再被支持.

6 thoughts on “Snow Leopard Ars Technica Review 摘要

Comments are closed.