【导读】随着RISC和x86多核服务器先后崛起,似乎多核已经成为提高性能的最佳途径。但对于大众用户而言,桌面应用的多线程优化前景,似乎还并不那么乐观。
多核难以进入桌面
多内核是Intel、AMD、Sun等厂商最新的新热门话题。随着提高时钟速度变得越来越困难,厂商把目光转向了多内核CPU,把多内核CPU视为进一步提高性能的最佳途径。用户对安装在一片芯片上的并行处理器提供的更高的性能前景兴奋不已。
对于不多的几种基于服务器的企业应用来说,这可能是真的,但是对于桌面应用,笔者并不指望这种前景会很快变为现实。人们对桌面多内核CPU寄予的期望是让我们所有的桌面应用程序全面利用芯片上的所有处理器内核。每个应用都能随着越来越多的处理器可供使用而适度地提高性能。正如过去提高时钟速度和应用带宽那样,增加处理器内核的数量同样应当提高性能。这种作法对于流行的企业应用是可行的,那么为什么对桌面应用就不行呢?
当然,Oracle、WebLogic、DB2和Apache等主要企业应用在设计上可以充分利用多内核处理器,它们在结构上是多线程的。它们必须支持作为它们市场的最基本部分的大型SMP服务器。
尽管利用并行CPU提高总体软件性能的概念至少已经出现35年了,但是在开发工具方面,使这种方法进入商业市场的东西却非常少。因此,绝大多数的应用是单线程的。虽然多内核CPU使你可以将多个应用分配到多个处理器上,但是单个应用的性能仍受到单个处理器的速度的限制。不管你有一个处理器还是100个处理器,应用性能保持不变,因为在任何时刻,每个应用只能运行在一个处理器上。
可能除Java外,现在没有广泛使用的提供多线程扩展的商用开发语言。实际上,直到现在还没有出现太多的需要。商用SMP系统的广泛可用直到90年代初才真正出现,即便如此,多线程应用仍进展缓慢。
并不乐观的前景
当笔者在Sun工作时,Sun重新编写了SunOS(即现在的Solaris),以利用其新的多线程架构。这是个长期而痛苦的过程。最初,在重新编写子系统时,采用了在两端加锁的做法,以确保它们作为一个大的单线程(MT-safe)来运行。以后子系统再次被重写,来实现获得最大并行性的完全的多线程优化(MT-hot)。当时,所有东西都是手工设计,没有管理这种复杂性的工具。
大约在同时,Sun实现了一套可以使用的用户多线程库。随着更大的SMP服务器开始出现在Sun的路线图上,主要企业应用厂商看到他们也必须投资把软件迁移到多线程架构。这个经历同样痛苦,与重写SunOS类似。Sun意识到为了销售新SMP服务器就必须使这些应用运行MT-hot,因此Sun利用自己取得的经验,将工程师派往这些公司帮助它们进行迁移。
今天的情况正在迅速演变为10年前一幕的重现。需要更多CPU带宽的应用厂商再也不能依靠提高时钟速度来获得更好的性能和功能。多数大规模客户端应用是用C或C++编写的,而且历史上一直被设计为单线程。这使应用的多线程优化是个需要耗费大量劳动力的改写过程。虽然一些厂商(多数在媒体领域中),已经对他们的应用进行了一些多线程加强,但他们才刚刚开始摘容易到手的果实。就多内核CPU而言,广泛的桌面性能和功能的改进仍需要几年时间。
多核处理器的桌面应用前景如何?鉴于计算机行业目前的状况,最可能的情景是:随着用户发现大多数应用运行在双内核系统上的速度还不如运行在单内核系统上,推出基于多内核CPU的桌面系统将停步不前。若想销售更多的机器/CPU,硬件厂商必须去做Sun过去所做的工作,并“鼓励”应用厂商将应用程序重新设计为具有多线程优化功能。为了再一次提高性能和功能,一直依靠CPU时钟速度不断提高的桌面应用厂商现在必须向长期的、痛苦的软件改写投资,这可能需要多年的时间。
由于工具开发商和应用开发商在制定计划时多以逐个季度的近视角度看问题,忽视了多内核CPU的大趋势和这类CPU对桌面系统的影响。因此,当这些新CPU进入市场时,开发工具没有部署到位、应用开发几乎无法进行。
因此笔者只能悲观地预测,应用开发商们将需要几年时间重新编写程序。一旦确立了一种转换方法,IDE工具厂商将开始推出帮助管理多线程开发复杂性的自动化扩展工具。这两个过程很容易用上3~5年的时间。具有全集成多线程控制结构的商业开发语言应当在5~7年后得到广泛使用。
但即使那样,个人用户也不要指望在每次推出新CPU时,桌面应用程序的性能都会马上提升。对于多内核系统来说,拥有桌面上的CPU带宽与能够利用它是两件完全不同的事情。