《Visual C++并行编程实战》译者序

说来凑巧,当开始着手这本书的翻译时,我刚刚入手了自己第一台四核计算机,而翻译工作临近完成之时,我又为自己添置了一台iPad 2(这是一台双核计算机)。由此可见,多核计算机已经完全进入了我的日常生活。鉴于自己是一个远远落后于时尚的家伙(例如我对双核手机就不太感冒),我毫不怀疑多核计算机已经走入了千家万户。这似乎也意味着多核应用的时代真正到来了!

先别高兴得太早。如果你仔细观察,就会发现自己并没有真正进入多核世界。因为我们计算机上的大部分应用都依然是单核的。也就是说,很多时候我们只是在一台多核计算机上跑着一堆单核程序罢了。或许,你的操作系统会为这些程序进程分配单独的执行内核,但是这种粒度上的多核优势是相当有限的,我们必须为自己开发出真正意义上的多核应用程序。

是的,这意味着要让程序自己具备多核处理的能力。也就是说,我们现在要并行化的不是进程,而是线程。相信很多有经验的程序员看到这里都会像我一样皱起眉头,这毫无疑问是一件非常麻烦的事,操作繁多,极易出错。最要命的是,这里的绝大部分bug都是难以重现的,更别提运用什么异常处理机制了。 除非能大大地简化这一过程,否则并行编程永远都是高手们的玩具而已。

有趣的是,如果你问一个C++程序员,什么库用起来是最简单的?他十之八九会说是STL。而你要是再问他,STL有什么缺点?他十之八九又会说,它太基本了,缺少模式化应用。而这就是这本书的优势所在。

这本书所介绍的并行模式库(简称PPL),实际上是一个模式化的C++模版库,而且作为Visual Studio 2010开发系统的一部分, 它已经完全被"内置"到了这一版本的C++语言中。这意味着你可以像使用std::for_each那样使用它的并行算法,像使用std::vector<T>那样使用它的并行容器。除此之外,它还很好的兼容了最新的C++ 0x标准(现在叫C++ 11了)的部分特性,例如lambda表达式。这将帮助我们写出更像C++的代码。

然而,这本书令人兴奋的地方远远不止如此,更重要的是它模式化了并行编程。在PPL的帮助下,我们可以更多地从"设计"的角度来进行并行编程,这样一来,你只要考虑如何并行化你的数据流或控制流。不用太担心数据共享的安全,或者操作同步的细节问题。当然前提是你选对了设计模式。

不过,设计模式毕竟不是设计模版,不能生搬硬套。你不能"手里有把锤子,就看什么都像钉子",设计模式只是一组设计方案的高度抽象,有着很多种变化(我们叫它模式变体),我们必须要学会灵活运用。这需要建立模式化的编程思维,而这就是这本书的终极目标。

作为译者,我从这本书中学到了不少东西,我的朋友高博(此人是《设计原本》和《研究之美》的译者)曾这样总结他的翻译心得:"译者应该从他的翻译中首先获益!",我非常认可,因而我对自己的这些工作深感荣幸。

当然,这是我第一次独立完成一本书的翻译,经验不足使我对这项工作战战兢兢,有收获也有遗憾,希望它至少已经做到了"正确性"。在翻译过程中我得到了很多朋友的帮助,下面对他们致以最高的谢意。

首先要感谢的是机械工业出版社的陈翼康编辑和盛大创新院的项目经理高博先生,没有他们的帮助和鼓励,我恐怕永远都不会有机会翻译这样一本好书。

接下来,必须感谢凯捷咨询的姚浩工程师、微软亚洲研究院的徐宁工程师、EMC的朱磊工程师以及思科的金瓯工程师,他们都仔细地阅读了全书的初稿,并给出了大量的修改意见,使我避免了很多灾难性的错误。甚至朱磊工程师和金瓯工程师还帮助我翻译了前言序言部分的稿件,对他们的帮助我铭刻在心,希望这本书也能给他们带来快乐。

?

凌杰
2012年3月31日
于新安江畔

?

?

?

?

?

时间: 2024-08-02 07:47:26

《Visual C++并行编程实战》译者序的相关文章

《JavaScript面向对象编程指南》读书笔记②

概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的知识点,以后再看也可当做拾遗之用! 内容 1.枚举属性用for-in循环显示. 2.当我们对对象的prorotype属性进行完全重写时,有可能会对对象constructor属性产生一定的负面影响. 3.uber--子对象访问父对象的方式Triangle.uber = TwoDShape.prototype 4

《JavaScript面向对象编程指南》读书笔记①

概述 JavaScript快忘完了,想看一本专业书拾遗,所以看了这本<JavaScript面向对象编程指南>. 个人觉得这本书讲的很透彻很易懂,一些原来有疑惑的地方在这本书里面豁然开朗,看起来非常爽! 现在我只记录一下我看这本书记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的知识点,以后再看也可当做拾遗之用! 记录 对象,方法,属性和类的通俗解释:对象往往是用名词来表示的(也被称为实例):方法一般都是些动词:属性值则往往是一些形容词:类就是相似对象的共同特征. 什么

《JavaScript面向对象编程指南》译者序

相对于Perl.Python等动态脚本语言来说,JavaScript确实是一门饱受误解的语言.对于译者这种从20世纪90年代末走过来的C++程序员来说,尤其如此.在那个年代,提起JavaScript总是会让人联想起各种花哨的小玩意儿.令人讨厌的恶作剧.浏览器之间的恶斗(例如IE与Netscape)等令人不太愉快的场景.总而言之,我长期以来对JavaScript的评价基本上是比较负面的,认为那不过是一个旁门左道的.不务正业的玩具罢了. 但随着AJAX技术在21世纪最初10年里的爆炸性发展,人们突然

[已读]JavaScript面向对象编程指南

又是一个忽悠人的书名,其实这本书的花了大量内容阐述JS的基础语法,BOM,DOM,事件,ajax(这个和很多js书一样).最后一章则是编程模式与设计模式. 我觉得与面向对象没多大关系,要算的话,prototype与继承,它确实有提到,但是不多(要看继承,还是应该去看<javascript高级程序(第三版)>). 最后一章的设计模式不错,工厂模式.单例模式.装饰器模式与订阅者模式都讲得很详细. PS,这个作者还写过一本书叫<javascript模式>,已经很老了.

《JavaScript面向对象编程指南》读书笔记—Function

4.2.3 Function 函数是一种特殊的数据类型,它实际上是一种对象. 4.2.3.3 call( )和apply( ) 1.在JavaScript中,每个函数都有call()和apply()两个方法.这两个方法的两个功能: (1)用他们来触发函数,并指定相关的调用参数. (2)他可以让一个对象去"借用"另一个对象的方法,并为已所用.这也是非常简单而实用的代码重用. 2.通过一个例子来讲解call(1)定义一个some_obj对象,该对象有一个say()方法: var some_

JavaScript面向对象编程指南——学习笔记1

第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对象的程序设计 1.5.1 对象(属性和方法的集合) 1.5.2 类 (相似对象的共同特征,如麻雀.老鹰都是鸟类) 1.5.3 封装 (将属性和方法集合起来,也有封闭作用域的概念,如封装一个播放器对象) 1.5.4 聚合 (将几个对象合并成一个对象) 1.5.5 继承 (一个实例对象继承父级对象的一些属性和方法) 1.5.6 多态 (一个对象调用其他对象的方法,call和apply) 1.6 OPP

javaScript面向对象编程指南笔记

变量声明: var v1,v2 = 'hello',v3=42; javascript中的数据类型分两部分:基本类型(数字,字符串,布尔值,undefined,null)和对象类型. - 查看变量类型操作符 typeof 变量或数值 - 当一个数字以0开头时,就表示这是一个八进制数.0377 代表十进制数255  :0x前缀的是十六进制数 - Infinity  任何超出了javascript的数,除以0结果也是Infinity - 字符串用于算术运算时,会被当做数字类型使用.字符串 -> 数字

JavaScript面向对象编程指南

1.面向对象程序设计 2.基本数据类型

javascript 面向对象编程指南 的一些题目

1. function C () { this.a = 1; return false; } console.log (typeof new C()); object function C () { this.a = 1; return "bbb" } console.log (typeof new C()); 也是object 除非return {} ,才是真正return的值,其他的都是object

[连载]JavaScript讲义(03)--- JavaScript面向对象编程

[连载]JavaScript讲义(03)--- JavaScript面向对象编程,布布扣,bubuko.com