“回答比保持沉默更容易”——对事务记忆之父 Maurice Herlihy 的精彩采访

莫里斯·赫利希 - 两个人的拥有者 迪杰斯特拉奖。 第一个是为了工作 “无等待同步” (布朗大学)以及最近的第二个,- “事务内存:无锁数据结构的架构支持” (弗吉尼亚理工大学)。 迪杰斯特拉奖颁发给其重要性和影响力至少十年来一直可见的工作,莫里斯显然是该领域最著名的专家之一。 他目前在布朗大学担任教授,取得了许多长达一段的成就。 他目前正在经典分布式计算背景下研究区块链。

此前,Maurice已经来俄罗斯参加SPTCC(录像)并在圣彼得堡召开了一次精彩的 JUG.ru Java 开发者社区会议(录像).

这篇 habrapost 是对 Maurice Herlihy 的精彩采访。 它讨论以下主题:

  • 学术界与工业界的互动;
  • 区块链研究基金会;
  • 突破性的想法从何而来? 人气的影响;
  • 在芭芭拉·利斯科夫(Barbara Liskov)的指导下获得博士学位;
  • 世界正在等待多核;
  • 新世界带来新问题。 NVM、NUMA 和架构黑客;
  • 编译器与处理器、RISC 与 CISC、共享内存与消息传递;
  • 编写脆弱的多线程代码的艺术;
  • 如何教学生编写复杂的多线程代码;
  • 新版《多处理器编程的艺术》一书;
  • 事务性内存是如何发明的;   
  • 为什么值得在分布式计算领域进行研究;
  • 算法的开发是否停止了,如何继续前进;
  • 在布朗大学工作;
  • 大学研究与公司内部研究的区别;
  • 九头蛇和 SPTDC。

采访由以下人员进行:

维塔利·阿克塞诺夫 — 目前,奥地利 IST 博士后,ITMO 大学计算机技术系员工。 在竞争数据结构的理论和实践领域进行研究。 在加入 IST 之前,他在 Peter Kuznetsov 教授的指导下获得了巴黎狄德罗大学和 ITMO 大学的博士学位。

阿列克谢·费多罗夫 - JUG Ru Group 的制作人,该公司是一家为开发者组织会议的俄罗斯公司。 Alexey 参与了 50 多个会议的筹备工作,他的简历包括从 Oracle(JCK,Java Platform Group)的开发工程师职位到 Odnoklassniki 的开发人员职位等各种内容。

弗拉基米尔·西特尼科夫 - Netcracker 工程师。 十年来致力于 NetCracker OS 的性能和可扩展性,该软件是电信运营商用来自动化网络和网络设备管理流程的软件。 对 Java 和 Oracle 数据库性能问题感兴趣。 官方 PostgreSQL JDBC 驱动程序中十几项性能改进的作者。

学术界与工业界的互动

Alexey:莫里斯,您在学术环境中工作了很长时间,第一个问题是学术界和工业界之间的互动。 您能谈谈最近他们之间的互动发生了怎样的变化吗? 20-30年前发生了什么,现在又发生了什么? 

莫里斯:我一直试图与商业公司密切合作,因为他们有有趣的问题。 通常,他们对公布他们的结果或向国际社会详细解释他们的问题不太感兴趣。 他们只对解决这些问题感兴趣。 我在这样的公司工作过一段时间。 我在数字设备公司的一个研究实验室全职工作了五年,该公司曾经是一家大型计算机公司。 我每周在 Sun、Microsoft、Oracle 工作一天,并在 Facebook 做一点工作。 现在我要休学术休假(美国大学的教授大约每六年可以休假一年)并在 Algorand,这是一家位于波士顿的加密货币公司。 与公司密切合作一直是一种乐趣,因为这是您了解新的、有趣的事物的方式。 您甚至可能是第一个或第二个就选定主题发表文章的人,而不是致力于逐步改进其他人已经在研究的问题的解决方案。

Alexey:您能更详细地告诉我们这是如何发生的吗?

莫里斯:当然。 你知道,当我在数字设备公司工作时,我和埃利奥特·莫斯发明了事务内存。 那是一个硕果累累的时期,每个人都开始对信息技术感兴趣。 并行性,包括,尽管多核系统当时还不存在。 在 Sun 和 Oracle 时代,我在并行数据结构方面做了很多工作。 在 Facebook,我参与了他们的区块链项目,我不能谈论这个项目,但我希望它尽快上市。 明年,我将在 Algorand 的一个研究小组工作,研究智能合约。

Alexey:区块链在过去几年已经成为一个非常流行的话题。 这对你的研究有帮助吗? 也许这会让从该行业运营的公司获得赠款或提供资源变得更容易?

莫里斯:我已经收到了以太坊基金会的一笔小额资助。 区块链的流行对于激发学生在这一领域的工作非常有帮助。 他们对此非常感兴趣,并且很高兴参与其中,但有时他们没有意识到,表面上听起来令人兴奋的研究实际上涉及真正的艰苦工作。 然而,我真的很高兴能够利用区块链的所有这些神秘性来帮助吸引学生。 

但这还不是全部。 我是多家区块链初创公司的顾问委员会成员。 他们中的一些人可能会成功,一些人可能不会,但看到他们的想法、研究他们并为人们提供建议总是很有趣的。 最令人兴奋的事情是当你警告人们不要做某事时。 很多事情乍一看似乎是个好主意,但真的是这样吗?

区块链研究基金会

Vitaly:有些人认为未来在于区块链及其算法。 其他人则说这只是另一个泡沫。 您能分享一下您对此事的看法吗?

莫里斯:区块链世界中发生的很多事情都是错误的,有些只是一个骗局,很多都被高估了。 不过,我认为这些研究有坚实的科学基础。 区块链世界充满了意识形态差异,这一事实表明了人们的兴奋程度和奉献精神。 另一方面,这对于科学研究来说并不是特别有利。 现在,如果您发表一篇谈论特定算法缺点的文章,所得到的反应并不总是完全科学的。 人们常常会抛弃自己的情绪。 我认为这一领域的这种兴奋可能对某些人来说似乎很有吸引力,但归根结底,还有真正的科学和工程问题需要解决。 这里有很多计算机科学。

Vitaly:所以你正在努力为区块链研究奠定基础,对吧?

莫里斯:我正在努力为坚实、科学和数学上健全的学科奠定基础。 部分问题在于,有时你不得不反驳其他人的一些过于严厉的立场,并忽视他们。 有时人们问我为什么在一个只有恐怖分子和毒贩感兴趣的地区工作。 这种反应就像追随者盲目重复你的话一样毫无意义。 我认为事实是介于两者之间。 区块链将对社会和全球经济产生深远影响。 但由于现代技术,这可能不会发生。 现代技术将会发展,未来所谓的区块链将会变得非常重要。 它甚至可能看起来不像现代区块链,这是一个悬而未决的问题。

如果人们发明了新技术,他们将继续称其为区块链。 我的意思是,就像今天的 Fortran 与 1960 世纪 XNUMX 年代的 Fortran 语言没有任何关系,但每个人都一直称其为 Fortran。 对于 UNIX 来说也是如此。 所谓的“区块链”仍将发生革命。 但我怀疑这个新的区块链是否会像今天每个人都喜欢使用的那样。

突破性的想法从何而来? 人气的影响

Alexey:从科学的角度来看,区块链的流行是否带来了新的结果? 更多的互动、更多的学生、更多的公司在该地区。 受欢迎程度的提高已经产生任何结果了吗?

莫里斯:当有人递给我一张刚刚筹集了很多资金的公司的官方传单时,我对此产生了兴趣。 它写了关于 拜占庭将军的任务,我对此非常熟悉。 传单中所写的内容在技术上显然是不正确的。 写下这一切的人并没有真正理解问题背后的模型……然而这家公司却筹集了很多资金。 随后,该公司悄悄地用更正确的版本替换了这张传单 - 我不会透露这家公司的名称是什么。 他们仍然存在并且做得很好。 这次事件让我相信,首先,区块链只是分布式计算的一种形式。 其次,进入门槛(至少在当时,四年前)相当低。 在这个领域工作的人非常有活力和聪明,但他们不读科学论文。 他们试图重新发明已知的事物,但却做错了。 今天,戏剧性的事情已经减少了。

Alexey:这很有趣,因为几年前我们有一个不同的趋势。 这有点像前端开发,基于浏览器的前端开发人员重新发明了后端已经流行的整个技术:构建系统、持续集成等。 

莫里斯:我同意。 但这并不奇怪,因为真正突破性的想法总是来自既定社区之外。 成熟的研究人员,尤其是成熟的学者,不太可能做出任何真正具有开创性的事情。 为下一次会议写一篇关于你如何稍微改进过去工作结果的论文很容易。 去参加会议,与朋友聚会,谈论同样的事情。 而那些突然提出突破性想法的人几乎总是来自外部。 他们不知道规则,他们不知道语言,但是尽管如此......如果您在一个已建立的社区内,我建议您关注新事物,关注那些不符合整体情况的事物。 从某种意义上说,可以尝试将外部的、更流畅的发展与我们已经理解的方法结合起来。 第一步,尝试建立科学基础,然后对其进行更改,以便将其应用于新的突破性想法。 我认为区块链非常适合作为一个新鲜的、颠覆性的想法。

阿列克谢:你认为为什么会发生这种情况? 因为“外面”的人没有社区固有的任何特定障碍?

莫里斯:这里有一个模式。 如果你读过印象派绘画和艺术的历史,那么著名的艺术家曾经拒绝印象派。 他们说这有点幼稚。 一代人之后,这种以前被拒绝的艺术形式成为了标准。 我在我的领域看到的是:区块链的发明者对权力、增加出版物和引文索引不感兴趣,他们只是想做一些好事。 于是他们坐下来开始做。 他们缺乏一定的技术深度,但这是可以解决的。 提出新的创意比纠正和强化不够成熟的创意要困难得多。 感谢这些发明家,我现在有事可做了!

Alexey:这类似于初创公司和遗留项目之间的区别。 我们继承了许多思维的局限性、障碍、特殊要求等等。

Maurice:一个很好的类比是分布式计算。 将区块链视为一家初创公司,将分布式计算视为一家大型成熟公司。 分布式计算正在被区块链收购并融合。

在芭芭拉·利斯科夫(Barbara Liskov)的指导下获得博士学位

Vitaly:我们还有很多问题! 我们在调查您的背景时发现了一个关于您博士学位的有趣事实。 是的,这是很久以前的事了,但这似乎是一个重要的话题。 您在自己的指导下获得了博士学位 芭芭拉·利斯科夫! Barbara 在编程语言社区中非常有名,而且总体来说也是一个非常知名的人。 您的研究领域是编程语言,这是合乎逻辑的。 您是如何转向并行计算的? 你为什么决定改变话题?

莫里斯:当时,芭芭拉和她的团队只是在研究分布式计算,这是一个非常新的想法。 也有人说分布式计算是无稽之谈,计算机之间的通信毫无意义。 分布式计算区别于集中式计算的问题之一是容错。 经过大量研究,我们决定分布式计算编程语言需要具有原子事务之类的功能,因为您永远无法确定远程调用是否会成功。 一旦有了事务,并发管理的问题就出现了。 然后,在获得高度并行的事务数据结构方面进行了大量工作。 然后,当我毕业的时候,我去了 卡内基梅隆大学 并开始寻找一个可以研究的主题。 我突然想到,计算已经从个人计算机转移到计算机网络。 多处理器将是进步的自然延续——“多核”这个词当时还不存在。 我想:对于多核系统来说,原子事务相当于什么? 绝对不是常规交易,因为它们太大太重。 这就是我想到这个主意的原因 线性化能力 这就是我想出整个无等待同步的方法。 这是试图回答具有共享内存的多处理器系统的原子事务的模拟是什么的问题。 乍一看,这部作品可能看起来完全不同,但实际上它是同一主题的延续。

世界正在等待多核

Vitaly:您提到当时多核计算机很少,对吧?

莫里斯:他们只是不在那儿。 有几个所谓的对称多处理器,它们基本上连接到同一总线。 但这效果并不好,因为每当一家新公司创建类似的产品时,英特尔都会发布优于多处理器的单处理器。

Alexey:这不是说在古代更多的是理论研究吗?

莫里斯:这不是一项理论研究,而是一项推测性研究。 所有这一切都不是为了处理许多定理;相反,我们提出了关于当时不存在的架构的假设。 这就是研究的目的! 没有一家公司会做这样的事情;这都是遥远未来的事情。 事实上,这种情况一直持续到 2004 年,真正的多核处理器出现。 由于处理器过热,您可以使处理器变得更小,但无法使其更快。 因此,出现了向多核架构的过渡。 这意味着我们过去开发的所有概念突然都有用处了。

Alexey:您认为为什么多核处理器在 XNUMX 年代才出现? 那么为什么这么晚呢?

莫里斯:这是由于硬件限制造成的。 英特尔、AMD 和其他公司非常擅长提高处理器速度。 当处理器变得足够小而无法再提高时钟速度时,因为处理器会开始烧坏。 您可以使它们更小,但不能更快。 他们的能力是什么 - 他们可以将八个、十六个或三十二个处理器安装到相同体积的机箱中,而不是一个非常小的处理器,而以前只能安装一个处理器。 现在,它们之间可以进行多线程和快速通信,因为它们共享缓存。 但你不能强迫它们跑得更快——有一个非常具体的速度限制。 他们继续一点一点地进步,但已经没有那么明显了。 物理定律阻碍了改进。

新世界带来新问题。 NUMA、NVM 和架构黑客

Alexey:听起来很合理。 新的多核处理器带来了新的问题。 您和您的同事预料到会出现这些问题吗? 也许您提前研究过它们? 在理论研究中,预测这些事情通常不是很容易。 当问题确实发生时,它们如何满足您和您同事的期望? 或者它们是全新的,您和您的同事必须花费大量时间来解决它们出现的问题?

Vitaly:我要补充一下 Alexey 的问题:您在研究理论时是否正确预测了处理器架构?

莫里斯:不是100%。 但我认为我和我的同事在预测具有共享内存的多核方面做得很好。 我认为我们正确地预测了开发无锁操作的并行数据结构的困难。 此类数据结构对于许多应用程序(尽管不是全部)都很重要,但通常您真正需要的是非锁定数据结构。 当我们发明它们时,许多人认为这是无稽之谈,锁一切工作都很好。 我们很好地预测,许多编程问题和数据结构问题都会有现成的解决方案。 还有更复杂的问题,例如 NUMA – 内存访问不均匀。 事实上,直到多核处理器发明之前,它们都没有被考虑过,因为它们太具体了。 研究界正在研究通常可以预测的问题。 一些与特定架构相关的硬件问题不得不等待——事实上,这些架构的出现。 例如,没有人真正研究 GPU 特定的数据结构,因为当时 GPU 还不存在。 尽管已经做了很多工作 SIMD,一旦合适的硬件可用,这些算法就可以使用。 然而,不可能预见一切。

Alexey:如果我理解正确的话,NUMA 是成本、性能和其他一些因素之间的一种折衷。 你知道为什么 NUMA 这么晚才出现吗?

Maurice:我认为 NUMA 的存在是因为用于生成内存的硬件存在问题:组件距离越远,访问它们的速度就越慢。 另一方面,这种抽象的第二个价值是内存一致性。 所以并行计算的特点之一就是所有的抽象都被稍微打破了。 如果访问完全统一,所有内存都将是等距的,但这在经济上,甚至在物理上都是不可能的。 所以才会出现这个冲突。 如果你编写的程序就像内存是统一的一样,那么它很可能是正确的。 从某种意义上说,它不会给出错误的答案。 但她的表演也无法捕捉到天上的星星。 同样,如果你写 自旋锁 如果不了解缓存层次结构,阻塞本身就是正确的,但您可能会忘记性能。 从某种意义上说,你必须编写生活在非常简单的抽象之上的程序,但你必须智胜给你这个抽象的人:你必须知道在抽象的下面有一些内存层次结构,有你和这段记忆之间的公共汽车,等等。 因此,各个有用的抽象之间存在一些冲突,这导致我们遇到非常具体和务实的问题。

维塔利:未来呢? 您能预测处理器下一步将如何发展吗? 有一种观点认为,答案之一是事务性内存。 您可能还有其他库存。

莫里斯:未来面临一些重大挑战。 一是连贯记忆是一种美妙的抽象,但在特殊情况下它开始崩溃。 例如,NUMA 就是一个活生生的例子,您可以继续假装统一内存存在。 其实不,生产力会让你哭泣。 在某些时候,架构师将不得不放弃单一内存架构的想法;你不能永远假装。 我们需要新的编程模型,这些模型必须足够易于使用且足够强大,才能提高底层硬件的效率。 这是一个非常困难的妥协,因为如果你向程序员展示硬件中实际使用的架构,他们会发疯的。 太复杂而且不便携。 如果你呈现的界面太简单,性能会很差。 因此,需要做出许多非常困难的权衡,以提供适用于真正大型多核处理器的有用编程模型。 我不确定除了专家之外还有谁能够在 2000 核计算机上进行编程。 除非你正在做非常专业或科学的计算或密码学或类似的事情 - 仍然不清楚如何正确地做到这一点。 

另一个类似的领域是专用架构。 图形加速器已经存在很长时间了,但它们已经成为如何采用特殊类型的计算并在专用芯片上运行它的经典示例。 这增加了它自己的挑战:如何与这样的设备通信,如何对其进行编程。 我最近一直致力于解决该地区的问题 近内存计算。 您采用一个小型处理器并将其粘合到一大块内存上,以便内存以 L1 缓存速度运行,然后与类似的设备进行通信 TPU – 处理器正忙于将新任务加载到内存核心中。 为这种事情设计数据结构和通信协议是另一个有趣的例子。 因此,定制处理器和硬件将在相当长的一段时间内继续得到改进。

Alexey:非易失性存储器怎么样(非易失性存储器)?

莫里斯:哦,这又是一个很好的例子! NVM 将极大地改变我们看待数据结构等事物的方式。 从某种意义上说,非易失性存储器有望真正加快速度。 但这并不会让事情变得更容易,因为大多数处理器、缓存和寄存器仍然是易失性的。 当你在崩溃后启动时,你的状态和记忆的状态将不会与崩溃前完全相同。 我非常感谢从事 NVM 工作的人们——研究人员在很长一段时间内有很多工作要做,试图找出正确性条件。 如果计算能够在高速缓存和寄存器的内容丢失但主存储器保持完好的崩溃中幸存下来,则计算是正确的。

编译器与处理器、RISC 与 CISC、共享内存与消息传递

Vladimir:从指令集的角度来看,您如何看待“编译器与处理器”的困境? 让我向那些不了解情况的人解释一下:如果我们使用倾斜内存或类似的东西,我们可以使用一组非常简单的命令,并要求编译器生成可以利用新优势的复杂代码。 或者我们可以采取另一种方式:实现复杂的指令并要求处理器对指令重新排序并用它们进行其他操作。 你怎么看待这件事?

莫里斯:我真的没有这个问题的答案。 这场争论已经持续了四十年。 曾经有一段时间,在 缩写的 一组命令和 复杂 内战是由一系列命令进行的。 有一段时间,RISC 人获胜,但后来英特尔重建了他们的引擎,以便在内部使用减少的指令集,并将全套指令导出到外部。 这可能是每个新一代都必须找到自己的妥协并做出自己的决定的话题。 很难预测这些事情中哪一个会更好。 因此,我所做的任何预测都会在一段时间内为真,然后在一段时间内再次为假,然后又再次为真。

Alexey:对于这个行业来说,某些想法在几十年内获胜而在接下来的几十年中失败的情况有多常见? 还有其他这种周期性变化的例子吗?

Maurice:在分布式计算这个话题上,有人相信 共享内存 以及相信的人们 消息。 最初,在分布式计算中,并行计算意味着消息传递。 然后有人发现使用共享内存编程要容易得多。 另一方则表示共享内存太复杂了,因为它需要锁之类的东西,所以值得转向只存在消息传递的语言。 有人看了之后说:“哇,这个消息传递实现看起来很像共享内存,因为你创建了很多很多这样的小模块,它们互相发送消息,而且它们都 互锁“让我们制作一个更好的共享内存数据库!” 这一切都在一遍又一遍地重复,不可能说其中一方绝对是对的。 一方永远会占主导地位,因为一旦其中一方几乎获胜,人们就会一次又一次地发明方法来改进另一方。

编写脆弱的多线程代码的艺术

Alexey:这很有趣。 例如,当我们编写代码时,无论使用哪种编程语言,我们通常都必须创建可读写的单元格之类的抽象。 但事实上,在某些物理层面上,这可能看起来像通过硬件总线在不同计算机和其他设备之间发送消息。 事实证明,工作同时在两个抽象层次上进行。

Maurice:共享内存是建立在消息传递之上的——总线、缓存等等,这是绝对正确的。 但是使用消息传递来编写程序很困难,因此硬件故意撒谎,假装您拥有某种统一的内存。 这将使您在性能开始恶化之前更容易编写简单、正确的程序。 然后你会说:看来是时候和缓存交朋友了。 然后你开始担心缓存的位置,从那里开始。 从某种意义上说,您正在破解抽象:您知道它不仅仅是平坦的、统一的内存,并且您将使用这些知识来编写缓存友好的程序。 这就是你在实际问题中必须要做的事情。 甜蜜、简单、美好的抽象与底层硬件极其复杂的实现之间的冲突是每个人都会做出自己的妥协的地方。 我有一本关于多处理器和同步的书,有一次我打算写一章关于数据结构的书 java.util.并发。 如果你看一下它们,就会发现诸如 有遗漏的清单 这些都是令人惊叹的艺术作品。 (编者注:熟悉Java语言的人至少应该看一下实现 并发跳过列表映射, 你可以查看以下链接 API и 源代码)。 但在我看来,向学生展示它们是不负责任的,因为这样的数据结构有点像马戏团里的一个人在熊坑上走钢丝。 如果你改变哪怕一个小细节,整个结构就会崩溃。 这段代码之所以非常快速和优雅,只是因为它写得完美,但稍有改动就会导致彻底失败。 如果我把这段代码作为例子给学生,他们会立即说:我也能做到! 然后一些飞机会坠毁,或者核反应堆会爆炸,我会因为在错误的时间向他们提供太多信息而感到内疚。

Alexey:当我年轻一点的时候,我很多次尝试研究Doug Lee的源代码,例如, java.util.并发,因为它是开源的,所以很容易找到并尝试了解那里发生的事情。 结果并不好:通常,当其他人都在做不同的事情时,我们完全不清楚为什么道格决定这样做。 您如何向您的学生解释这些事情? 例如,是否有特定正确的方法来描述硬核算法的具体细节? 你怎么做到这一点?

莫里斯:绘画老师有句老话,他们首先记得:如果你想像毕加索一样画画,你首先需要学习如何画简单的写实画,只有当你知道规则时,你才能开始打破它们。 如果你一开始就立即违反规则,你最终会陷入混乱。 首先,我教学生如何编写简单、正确的代码,而不用担心性能。 我想说的是,这里潜伏着复杂的时序问题,所以不要担心缓存,不要担心内存模型,只需确保一切正常工作即可。 这已经够困难的了:现代编程本身并不容易,尤其是对于新学生来说。 当他们对如何编写正确的程序有了直觉时,我说:看看这两个自旋锁实现:一个非常慢,第二个也不是很慢,但更好。 然而,从数学上来说,这两种算法是相同的。 事实上,其中之一使用缓存局部性。 其中一个运行在本地缓存的数据上,另一个则通过总线重复执行操作。 如果你不理解代码是什么,也不知道如何打破抽象并查看底层结构,你就无法编写高效的代码。 但您无法立即开始执行此操作。 有些人立即开始这样做,并相信自己的天才,通常会因为不理解原理而以糟糕的方式结束。 没有人能像毕加索那样画画,也没有人能像道格·李(Doug Lee)那样在大学刚毕业的第一周就编写程序。 达到这一知识水平需要数年时间。

Alexey:原来你把问题分成两部分:第一是正确性,第二是性能?

莫里斯:没错。 并且,完全按照这个顺序。 部分问题在于新学生不明白正确性是很难实现的。 乍一看他们说:这显然是正确的,剩下的就是加快速度。 所以有时我会告诉他们一个最初不正确的算法,就好像它是正确的一样。

如何教学生编写复杂的多线程代码

Alexey:只是为了看看他们是否能感觉到捕获物?

莫里斯:我总是提前警告,有时我会提出不正确的算法。 你不应该欺骗人们。 我建议他们对这些信息持保留态度。 如果我告诉你一些事情并说:“看,这显然是正确的”——这是一个信号,表明他们在某个地方试图欺骗你,你应该开始提问。 接下来,我尝试鼓励学生继续提问,然后我建议:“如果我们保持现状会发生什么?” 他们立即发现了错误。 但让学生相信他们需要担心正确性比乍看起来要困难得多。 这些学生很多都是高中时期就有编程经验的,有的已经找到工作,做过编程,他们都信心满满。 这就像军队:你首先必须改变他们的情绪,以说服他们耐心地解决出现的问题。 或者也许就像佛教僧侣:首先他们学习推理正确性,一旦他们理解了推理正确性的方法,他们就可以进入下一个层次并开始担心性能。

Alexey:也就是说,有时你向学生展示无效的示例,通过这些示例,你可以得到反馈,表明他们是否理解问题的本质,是否可以找到错误的代码和错误的结果。 那么,学生通常会让你快乐还是悲伤?

莫里斯:学生几乎总是最终会发现错误。 如果他们搜索得太慢,我会提出引导性问题,在这里重要的是要明白,如果你从不欺骗他们,他们就会开始无意识地将你的话视为最终真理。 然后他们会在课堂上用笔记本电脑阅读 Facebook 时感到无聊并开始睡着。 但当你提前告诉他们,他们会被骗,如果他们没有察觉到被骗,他们会显得很愚蠢,他们就会变得更加警惕。 这在很多方面都是好事。 我希望学生不仅质疑自己对问题的理解,更质疑老师的权威。 这个想法是,学生可以随时举手说:我认为你刚才说的是错误的。 它是一个重要的学习工具。 我不想让任何一个学生坐下来默默地想:这一切看起来完全是无稽之谈,但举手太可怕了,而且他是教授,所以他说的都是事实。 因此,如果他们事先被警告并非所有讲述的内容都一定是真实的,他们就会有动力更加关注这些材料。 我明确表示可以举手提问。 你的问题可能听起来很愚蠢或天真,但这通常是最好的问题的产生方式。

阿列克谢:非常有趣。 通常人们都会有某种心理障碍,不允许他们向教授提问。 尤其是如果房间里有很多人,每个人都担心讨论你的愚蠢问题会占用所有这些人的时间。 有什么技巧可以解决这个问题吗?

莫里斯:我经常停下来问经典问题。 陈述是否正确,或者他们将如何解决正在讨论的问题。 这是一个关键的动作,尤其是在课程开始时,人们都不好意思说哪怕是最小的事情。 你问学生一个问题,然后不再多说什么。 一片寂静,每个人都有点紧张,紧张感越来越大,然后突然有人受不了,崩溃了,说出了答案。 这就是扭转局面的方法:继续保持沉默变得比回答更困难和不方便! 这是标准的教学技巧。 世界上每个老师都应该知道如何做到这一点。

阿列克谢:现在我们为这次采访起了一个很好的标题:“回答比保持沉默更容易。”

维塔利:让我再问一次。 您正在研究拓扑证明。 你是怎么参与其中的,因为分布式计算和拓扑是完全不同的东西!

莫里斯:这里面有一个隐藏的联系。 当我还是一名学习数学的学生时,我学习的是纯数学。 我对计算机并没有真正的兴趣,直到我的学业结束,我发现自己面临着找工作的迫切需要。 作为一名学生,我学习了代数拓扑。 许多年后,在研究一个名为 “k-集合协议问题”,我使用图表来对问题进行建模,并且在当时看来,我找到了解决方案。 你只需要坐下来数数即可。 尝试在此图上找到合适的答案。 但我的算法不起作用:结果证明他会永远兜圈子。 不幸的是,所有这一切都无法用所有计算机科学家都知道的图论的形式语言来解释。 然后我想起很多年前,在拓扑课上,我们使用了这个概念 “简单复杂”,这是图到更高维度的推广。 然后我问自己:如果我们用单纯复形重新表述这个问题,会发生什么? 这成为了关键时刻。 通过使用更强大的形式主义,问题突然变得简单得多。 人们用图表与之抗争了很长时间,但无能为力。 即使现在他们也做不到——事实证明,正确答案不是算法,而是解决问题的不可能的证明。 也就是说,这样的算法根本不存在。 但 每一个不可能的证据 基于单纯复形或基于人们假装不考虑单纯复形的事物。 仅仅因为你给某样东西起了一个新名字,它并不会失去它的本质。

维塔利:看来你只是运气好?

莫里斯:除了运气,还有 准备就绪。 这意味着你不应该忘记之前学到的“无用”的东西。 你学到的无用的东西越多,面对新问题时你能提炼出的想法就越多。 这种直观的模式匹配很重要,因为...让我们这样做,这是一个链条:一开始我发现图表根本不起作用或者根本不起作用,它让我想起了八个事件中的一些事情几年前和我的学生时代,当我们研究所有这些单纯复形时。 这反过来又让我找到了我的旧拓扑教科书并将其重新加载到我的脑海中。 但如果没有那些旧知识,我永远不会在解决原来的问题上取得任何进展。

新版《多处理器编程的艺术》一书

阿列克谢:你对你的书说了几句话。 您写了世界上最著名的多线程书籍,这可能不是最糟糕的秘密, 《多处理器编程的艺术》。 它已经有大约 11 年历史了,从那时起它才被发布  修改重印。 会有第二版吗?

莫里斯:你问得很好! 很快,三个月左右。 还有两位作者,我们添加了更多材料,改进了有关 fork/join 并行性的部分,编写了有关 MapReduce 的部分,添加了很多新内容并扔掉了不必要的内容 - 在撰写本文时非常有趣第一版,但今天已经不存在了。 结果是一本经过非常认真修改的书。

Alexey:一切都已经完成了,剩下的就是发布了吗?

莫里斯:还有几章需要改进。 我们的出版商(我认为他们已经讨厌我们了)仍在努力传达我们应该更快工作的信息。 我们远远落后于计划。 从理论上讲,我们本可以早几年完成这本书。

阿列克谢:圣诞节前有机会获得这本书的新版本吗?

莫里斯:这就是我们的目标! 但我已经多次预言胜利,以至于没有人相信我了。 在这件事上你可能也不应该太相信我。

Alexey:无论如何,这都是个好消息。 我真的很喜欢这本书的第一版。 你可以说我是粉丝。

莫里斯:希望新版能够对得起您的热情,谢谢!

事务性内存是如何发明的

Vitaly:下一个问题是关于事务内存的。 据我了解,您是这个领域的先驱,您在没有人考虑这些事情的时候发明了它。 你为什么决定进入这个领域? 为什么交易对您来说很重要? 您是否认为有一天它们会在硬件中实现?

莫里斯:我从研究生研究时期起就知道交易了。

Vitaly:是的,但这些是不同的交易!

Maurice:我与 Elliott Moss 一起研究非阻塞垃圾收集。 我们的问题是,我们想要原子地改变内存中的几个单词,然后算法会变得非常简单,并且至少其中一些会变得更加高效。 使用 比较和交换加载链接/条件存储由并行架构提供,可以做一些事情,但它非常低效且丑陋,因为您必须处理间接层。 我想改变内存字,我需要切换,因为我只能改变一个指针,所以它们需要指向某种类似目录的结构。 我们讨论了如果我们可以改变硬件以便它可以同时录制该多好。 Elliott 似乎已经注意到了这一点:如果您查看缓存一致性协议,您会发现它们已经提供了大部分所需的功能。 在乐观事务中,缓存一致性协议会注意到存在时序冲突,并且缓存将变为 空虚。 如果您推测性地在缓存上运行事务并使用一致性协议机制来检测冲突,会发生什么? 推测性硬件架构很容易设计。 所以我们写了一个 第一篇出版物 关于事务内存。 与此同时,我工作的公司 Digital Equipment Corporation 正在开发一款名为 Alpha 的新型 64 位处理器。 所以我去向 Alpha 开发小组介绍了我们令人惊叹的事务内存,他们问:如果我们将所有这些直接添加到处理器中,我们公司会获得多少额外收入? 我对此完全没有答案,因为我是一名技术专家,我不是营销专家。 我实在无话可说。 他们对我什么都不知道并没有留下深刻的印象。

维塔利:数十亿! 就说几十亿吧!

莫里斯:是的,这就是我应该说的。 现在,在初创公司和一切的时代,我知道如何编写商业计划。 您可以在潜在利润的大小上撒一点谎。 但在当时,这似乎很天真,所以我只是说:“我不知道。” 如果您查看有关事务性内存的出版物的历史,您会发现一年后有几次引用它,然后大约十年没有人引用这篇论文。 这些引用出现在 2004 年左右,当时真正的多核出现了。 当人们发现编写并行代码可以赚钱时,新的研究开始了。 拉维·拉杰瓦尔 写了一篇文章,这在某种程度上将事务内存的概念引入了主流。 (编者注:本文有第二个版本,于 2010 年发布,可免费获取 作为 PDF)。 突然间,人们意识到如何使用这一切,如何加速带锁的传统算法。 这是一个在过去看起来只是一个有趣的学术问题的好例子。 是的,如果你当时问我是否认为这一切在未来很重要,我会说:当然,但具体什么时候还不清楚。 也许50年后? 实际上,这仅仅十年。 当你做了一件事,仅仅十年后人们就注意到了,这是非常好的。

为什么值得在分布式计算领域进行研究

Vitaly:如果我们谈论新的研究,您会给读者什么建议——分布式计算还是多核?为什么? 

Maurice:现在获得多核处理器很容易,但建立真正的分布式系统却很难。 我开始研究它们是因为我想做一些与我的博士论文不同的事情。 这是我总是给新生的建议:不要写论文的续篇——尝试朝新的方向前进。 而且,多线程很容易。 我可以在我的笔记本电脑上尝试运行我自己的 fork,而无需起床。 但如果我突然想要创建一个真正的分布式系统,我就必须做很多工作,吸引学生等等。 我是个懒人,宁愿研究多核。 在多核系统上进行实验也比在分布式系统上进行实验更容易,因为即使在愚蠢的分布式系统中也有太多需要控制的因素。

Vitaly:你现在在做什么,研究区块链? 您应该首先关注哪些文章?

莫里斯:最近出现 非常好的文章,这是我和我的学生 Vikram Saraf 一起写的,特别是为了在 代币经济学会议 三周前在巴黎。 这是一篇关于实用分布式系统的文章,其中我们建议使以太坊成为多线程。 目前,智能合约(在区块链上运行的代码)是顺序执行的。 我们之前写过一篇文章,讨论了一种使用投机交易来加速这一过程的方法。 我们从软件事务内存中汲取了很多想法,并表示如果将这些想法作为 Etherium 虚拟机的一部分,那么一切都会运行得更快。 但为此,合同中必须不存在数据冲突。 然后我们假设现实生活中确实不存在这样的冲突。 但我们没有办法找到答案。 然后我们突然想到,我们手上有近十年的真实合约历史,所以我们抛弃了以太坊区块链并问自己:如果这些历史记录并行执行会发生什么? 我们发现速度显着提高。 在以太坊的早期,速度提高了很多,但今天一切都变得更加复杂,因为合约更少,需要序列化的数据发生冲突的可能性也变得更高。 但这一切都是基于真实历史数据的实验工作。 区块链的好处在于它会永远记住一切,因此我们可以回到过去并研究如果我们使用不同的算法来运行代码会发生什么。 过去的人们会如何喜欢我们的新想法? 这样的研究做起来更容易也更有趣,因为有一个东西可以监控一切并记录一切。 这已经更类似于社会学而不是算法的开发。

算法的发展已经停止了吗?如何继续前进?

Vitaly:最后一个理论问题到了! 是否感觉竞争数据结构的进步每年都在减少? 您认为我们对数据结构的理解已经达到了一个平台期,还是会有一些重大改进? 也许有一些聪明的想法可以彻底改变一切?

Maurice:我们可能已经在传统架构的数据结构方面达到了一个平台期。 但新架构的数据结构仍然是一个非常有前途的领域。 如果您想为硬件加速器等创建数据结构,那么 GPU 的数据结构与 CPU 的数据结构有很大不同。 当您为区块链开发数据结构时,您需要对数据进行哈希处理,然后将它们放入类似的内容中 默克尔树,防止假冒。 最近这一领域的活动激增,许多人都做得很好。 但我认为将会发生的是,新的架构和新的应用程序将导致新的数据结构。 遗留应用程序和传统架构——可能不再有太多的探索空间。 但如果你走出人迹罕至的道路并超越边缘,你会看到主流不认真对待的疯狂事情 - 这才是所有令人兴奋的事情真正发生的地方。

Vitaly:因此,为了成为一名非常著名的研究员,我必须发明自己的架构:)

莫里斯:你可以“窃取”别人的新架构 - 这看起来容易多了!

在布朗大学工作

维塔利:你能告诉我们更多关于 布朗大学你在哪里工作? 在信息技术领域,人们对他知之甚少。 例如,少于麻省理工学院。

莫里斯:布朗大学是美国最古老的大学之一。 我认为只有哈佛年纪大一点。 棕色是所谓的一部分 常春藤盟校,这是八所最古老大学的集合。 哈佛、布朗、康奈尔、耶鲁、哥伦比亚、达特茅斯、宾夕法尼亚、普林斯顿。 这是一所古老、小型、有点贵族式的大学。 主要重点是文科教育。 它并不是想像麻省理工学院那样,麻省理工学院非常专业和技术性。 布朗大学是学习俄罗斯文学或古典希腊语,当然还有计算机科学的好地方。 它注重全面教育。 我们的大多数学生都会去 Facebook、苹果、谷歌——所以我认为我们的学生在这个行业找到工作没有问题。 我之所以去布朗大学工作,是因为我之前曾在波士顿的数字设备公司工作过。 这家公司发明了许多有趣的东西,但却否认个人电脑的重要性。 一家命运艰难的公司,其创始人曾经是年轻的革命者,他们什么也没学到,什么也没有忘记,所以在十几年的时间里从革命者变成了反动者。 他们喜欢开玩笑说个人电脑应该放在车库里——当然,是一个废弃的车库。 很明显,它们被更灵活的公司摧毁了。 当公司明显陷入困境时,我给布朗的一个朋友打电话,布朗距离波士顿大约一小时车程。 当时我不想离开波士顿,因为其他大学没有太多空缺。 当时计算机科学领域的工作岗位并不像现在那么多。 布朗有一个空缺,我不必搬家,我不必搬家,而且我真的很喜欢住在波士顿! 这就是我决定去布朗大学的原因。 我喜欢。 学生们都很棒,所以我从来没有尝试过去其他地方。 在我的休假期间,我在微软工作了一年,又去了海法的以色列理工学院工作了一年,现在我将在 Algorand 工作。 我到处都有很多同事,因此我们教室的物理位置并不那么重要。 但最重要的是学生,他们是这里最棒的。 我从来没有尝试过去其他地方,因为我在这里很开心。

然而,尽管布朗在美国享有盛誉,但他在国外却出人意料地默默无闻。 正如你所看到的,我现在正在尽一切努力来纠正这种状况。

大学研究与企业内部研究的区别

Vitaly:好的,下一个问题是关于数字设备的。 你当时是一名研究员。 在大公司研发部门工作和在大学工作有什么区别? 有什么优点和缺点?

Maurice:我在微软工作了二十年,与 Sun Microsystems、Oracle、Facebook 以及现在的 Algorand 的员工密切合作。 基于这一切,我想说,在公司和大学里进行一流的研究都是可能的。 重要的区别在于,在公司里你与同事一起工作。 如果我突然有了一个尚不存在的项目的想法,我必须说服我的同事这是一个好主意。 如果我在布朗大学,那么我可以告诉我的学生:让我们研究反重力! 他们要么离开去寻找其他人,要么承担一个项目。 是的,我需要寻找资金,我需要写一份拨款申请,等等。 无论如何,学生总是很多,你可以单方面做决定。 但在大学里,你很可能不会与与你水平相当的人一起工作。 在工业研究领域,您首先必须让每个人相信您的项目值得承担。 我不能向任何人订购任何东西。 这两种工作方式都很有价值,因为如果你正在做一些非常疯狂的事情,而你的同事很难说服,那么说服研究生就更容易了——特别是如果你付钱给他们的话。 如果你正在做的事情需要大量的经验和深厚的专业知识,那么你需要同事能够说“不,碰巧我在这方面很了解,而你的想法很糟糕,行不通。” 这对于浪费时间来说非常有用。 另外,如果在工业实验室你花了很多时间写报告,那么在大学你就花这些时间来赚钱。 如果我希望学生能够去某个地方,我就必须在其他地方找到钱。 你在大学里的地位越重要,你花在筹集资金上的时间就越多。 现在你知道我的工作是什么了吧——职业乞丐! 就像那些拿着供盘走来走去的和尚。 一般来说,这两项活动是相辅相成的。 这就是为什么我努力在两个世界中生活并脚踏实地。

维塔利:看来说服一家公司比说服其他科学家更困难。

莫里斯:更困难,而且更多。 而且,不同领域的研究也不一样:有的进行全面研究,有的则专注于自己的主题。 如果我去微软或 Facebook 说:让我们开发反重力技术,他们几乎不会感激。 但如果我对我的研究生说同样的话,他们很可能会立即开始工作,尽管现在我会遇到问题 - 毕竟我需要为此找到钱。 但只要你想做的事情符合公司的目标,那家公司就可以成为一个非常好的研究场所。

九头蛇和 SPTDC

维塔利:我的问题即将结束,我们来谈谈即将到来的俄罗斯之行吧。

莫里斯:是的,我期待着回到圣彼得堡。

Alexey:今年我很荣幸有你和我们在一起。 这是您第二次来圣彼得堡,对吧?

莫里斯:已经是第三个了!

阿列克谢:我明白,但是 斯普顿发展中心 ——绝对是第二个。 上次给学校打电话的时间 斯泰克,我们现在更改了一个字母(C 更改为 D,并发更改为分布式),以强调今年有更多专门与分布式计算相关的领域。 您能简单介绍一下您在学校的报告吗? 九头蛇会议?

莫里斯:在学校我想谈谈区块链的基础知识以及你可以用它做什么。 我想表明区块链与我们熟悉的多线程编程非常相似,但有自己的细微差别,理解这些差异很重要。 如果您在常规 Web 应用程序中犯了错误,那就很烦人了。 如果您在金融应用程序中编写有错误的代码,那么有人肯定会偷走您所有的钱。 这是完全不同级别的责任和后果。 我将谈谈工作量证明、智能合约以及不同区块链之间的交易。

我旁边工作的其他演讲者也会对区块链有话要说,我们同意相互协调,以便我们的故事能够很好地结合在一起。 但对于工程报告,我想向广大受众提供可以理解的解释,解释为什么你不应该相信你听到的有关区块链的一切,为什么区块链是一个伟大的领域,它如何与其他已知的想法相适应,以及为什么我们应该大胆地看待到未来。

Alexey:另外,我想说这不会像两年前那样以聚会或用户组的形式进行。 我们决定在学校附近举行一个小型会议。 原因是,在与彼得·库兹涅佐夫沟通后,我们意识到学校仅限于一百人,也许是120人。 同时,还有很多工程师想要与您交流、参加演示,并且普遍对该主题感兴趣。 为此,我们创建了一个新的会议 称为九头蛇。 顺便问一下,有什么想法为什么是九头蛇吗?

莫里斯:因为会有七个发言者? 他们的头可以被砍掉,新的说话者会在他们的地方长出来吗?

Alexey:培养新演讲者的好主意。 但其实,这里还有一个故事。 还记得奥德修斯的传说吗? 斯库拉和卡律布狄斯? 九头蛇有点像卡律布狄斯。 故事是这样的:有一次我在一次会议上发言,谈到了多线程。 这次会议只有两个曲目。 在报告开始时,我告诉大厅里的观众,他们现在可以在斯库拉和卡律布狄斯之间做出选择。 我的精神动物是 Charybdis,因为 Charybdis 有很多头,而我的主题是多线程。 这就是会议名称的显示方式。

无论如何,我们已经没有问题和时间了。 所以,谢谢朋友们接受我们的精彩采访,我们 SPTDC 学校和 Hydra 2019 见!

您可以在 Hydra 2019 会议上继续与 Maurice 交谈,该会议将于 11 年 12 月 2019 日至 XNUMX 日在圣彼得堡举行。 他会带着一份报告来 “区块链和分布式计算的未来”。 可以购买门票 在官方网站上.

来源: habr.com

添加评论