别让我开始

蒸汽钻

David Platt

David Platt约翰 · 亨利说: 船长, "一个男人没什么只一个男人但我让我打败你蒸汽钻之前,我会死用锤子在我的手。

—"民谣的约翰 · 亨利的"美国传统

约翰 · 亨利占据美国民间传说中一个强大的地方 (bit.ly/3HqIMd)。有些人说他是只是一个高大的故事,但其他人坚持认为他基于一个真正的男人。约翰 · 亨利"开车钢"在 19 世纪晚期,碰撞到钢钻杆、 大锤镗孔入岩石爆破铁路隧道。当蒸汽动力钻威胁他的工作时,约翰 · 亨利向一场决斗挑战它 — 赢了。民谣说:"约翰 · 亨利驾驶 16 英尺和蒸汽钻仅使九,"。但不管你听到这首歌的哪个版本,它总是收场了:"他辛勤工作,他打破了他可怜的心,所以他放下他的锤子,他死了"。

这种典型硬件的家伙已经用软件做,听说你想知道。我有我自己的约翰 · 亨利时刻上个星期,教学在哈佛延长我"编程 Microsoft.NET"类中的线程。我开始我的学生与原始线程,然后给他们看了线程池,然后进入同步和线程关联的设计问题。结束与残酷家庭作业,就让他们使用线程池,但规定不允许它的要求。(学生:"普拉特,你是一个虐待狂"我:"嗯,是的你点是什么吗?")

下周我给他们看的任务并行库 (TPL),与它的 Parallel.For 和 Parallel.ForEach 构造。我然后告诉他们我自己也不相信它。它是太新了。它不救我足够的时间和精力来补偿损失的控制和透明度。然后我意识到我我也会变成的恐龙。

在计算每个预先已生成了一个新的抽象层。并与每一个更高的抽象级别,列国努力掌握较低级别的程序员会生气。现在任何白痴可以做他们坏了他们的屁股来学习。不公平 !

例如,磁磁盘类似第一次出来的时候不得不直接指挥硬件的程序员 — 采取头 3、 移动跟踪 19、 等待部门 247 要过来,然后阅读它。然后一些聪明的家伙想出如何隐藏背后提供一系列逻辑上连续的字节被称为文件的一个软件抽象层硬件。

"它是方式效率低下,"怀古尖叫。"你的孩子这些天有没有尊重资源。认为所有这些部门都被浪费了,做什么你叫他们的目录?

"你们这群老放屁,"冷笑孩子们。"做你仍然节目与唯一的 1 和 0?"

何时过我飞跃从暴发户磕到?我有没有问题,线程池。我展示学生如何监督其线程的 CPU 使用率将更多的线程分配给该作业,当其中一些阻止。但至少在那里我可以看到的线程,而不是第三方物流,他们就藏在哪里。

我总是发现有不能代替的知道发生了什么事在引擎盖下。抽象总是漏出。磁盘成为碎片,散射不方便群集需要金属的浪费移动的文件。那些在我 MFC 类年前做最好的学生是那些听从我的意见,研究对 Windows API 的查尔斯 Petzold 经典著作。每当我修复客户与线程相关的问题,它总是 — 我的意思是每一次,无一例外 — 源于基本的误解什么线程是和不会。

所以吧,使用第三方物流 Parallel.For 和 Parallel.ForEach。但如果你使用它们作为一种精神寄托不了解他们真正的工作,就像使用内胎要划出去到波士顿港口的中间,不知道如何游泳。你就会大喊着为海岸警卫队的我,这样的人来拯救你。幸运的是,我们的球,因为我们知道我们必须。一个怪人只不过是一个怪人。我让你打我的第三方物流之前,我会死与线程的句柄,在我的手。

David S. Platt 教授在哈佛大学扩展学校和公司在世界各地的.NET 编程。他是 11 的编程书籍,包括"为什么软件吸"(艾迪生-韦斯利专业,2006年) 和"介绍 Microsoft.NET"(微软出版社,2002 年) 的作者。Microsoft 软件传奇命名为他在 2002 年。 他不禁怀疑是否他应磁带下来的两根手指他的女儿,所以她学会了如何以八进制数数。你可以联系他在 rollthunder.com