《并发哲学:从编程入道到开悟升天》5.2 作者经历——谈面试与感悟

作者经历——谈面试与感悟

通过系统化对并发哲学思想的探讨,我们能够站在更高的层次分析先前学习的知识。

面试应用

许多的程序员谈及技术书籍的涉猎,往往是为了扩充知识面,而扩充知识水平可以充分量化的一个水平就是薪资待遇。通过跳槽往往可以提升薪水,而找工作很重要的一个环节就是面试。本人不敢妄谈自己有多高的薪水,但想说明的是读者应该如何将本书的知识应用到日常的面试过程中,来展示经过升级的,面向并发的认知。

不同于《剑指offer》等纯面试辅助书籍,本书的结果导向为通过正确理解并发概念,试图快速、正确的构建良好并发性能的程序,优化自己的代码工程,并将效率的提升引入到日常的生活中。从实用性上来说,是具有较高价值的。不过,我们并没有专门开设大篇幅讲解如何对面试问题进行精细化拆解,因为不同语言面向并发编程有不同的表现形式,名堂最多的可能要属java和python,C++等老牌语言也有涉猎,但到了Golang,由于极为精简的抽象,面试官也不愿意在并发的问题上有过多顾虑,毕竟系统层级的问题基本上都被屏蔽,几乎只需要考虑用户态后期引入的资源竞争等问题。

如果是针对干练且需要经过润色的面试过程,那书本中的一些知识点的表述方式可能不能直接拿来即用。

以针对进程、线程还有协程的关系为例,在4.3节中,我们引用了网络上的知识来直接介绍进程、线程和协程。但是在面试过程中,我们很明显不能简单堆砌这些知识点,需要对其中的内容进行针对性的强调,来争取面试官的眼前一亮。

例如,在简要汇报有关文本区域、数据区域和堆栈在三种“程”上的体现之后,我们可以进一步体现抽象层次:统一阐述进程、线程和协程都是针对不同任务粒度的不同抽象,又着重体现进程对于系统、线程对于CPU、协程对于用户三种抽象层级使用环境的差异。这样,我们用抽象任务粒度这一作用,统一了三种“程”的宏观体现,但通过分层和作用标识,明晰了不同层级的概念。

如果面试官考察并发和并行的区别,这恰巧正中我们下怀,你可以将投掷者和包工头的模型生动形象的讲给面试官,但一定不要忘记提及重点,我们这里再强调一下,并发是对任务分配过程的研究,并行是对事物客观运行时间片重叠的描述。如果面试官对我们的这句经典论述不敢苟同的话,那么可以进一步阐述:对任务分配过程的研究,目的在于构建正确的结构和代码片段,使得任务被分配后在一个较长时间段内,从逻辑时间片上来说这若干个任务实现了并行。

此时面试官将能更好的认同你所阐述的。锦上添花,你可以再补充一句:只有当客观条件满足多个实体可以互不干扰的分立执行任务,实际任务并行的条件才可以满足。如果面试官体现出来对你的刮目相看,在有余力的情况下,可以进一步拓展在4.3节中阐述并发和并行分离考虑的哲学,顺带再提一下止部抽象链。这感觉简直完美。

简而言之,将本书的知识落实到面试应用,需要考虑更多面试案例内的一些经典话术,将你认为正确的知识点进行有机串联。

为什么本书花费大篇幅探讨哲学

读到至此,许多的读者应该会感觉,这是一本掺杂了众多哲学概念,多学科交叉,又在并发编程领域浅尝辄止的书籍。对前两点作为作者我表示认同,但对于浅尝辄止这一点我不敢苟同。

为什么我们要讨论哲学,是因为哲学的思考构建了我们基本的世界观、价值观、人生观,也就统称我们的三观。其实,人类的生活无时无刻不在受我们大脑内哲学思想的指导,从而诞生出具体的行事准则。在人工智能飞速发展的当下,人脑不应该承载过多底层技术的内容。

放眼看一看现在的世界,哪一件变革性的力量不是为了解放生产力而生呢?近年来火热讨论的云原生,使得开发人员不再为底层运维架构的适配而苦恼;低代码平台的兴起,让更多有点子、学习能力强但可能对代码学习无兴趣的人们可以简单搭建出伟大的产品。

并发能力作为一件必知必会的东西,如何将他的威力最大化,并不体现在你对先人费尽功夫屏蔽的细节重新挖出来,研究得多么透彻,而体现在如何能够利用现有的资源,最快的投入生产状态。现在,我们的要素是很齐全的,尽管谈不上十全十美而已,但绝不是浅尝辄止。

我们需要把精力花在什么地方呢?

2017年,作者有幸参加了Intel人工智能某一个高端论坛,在论坛内,Intel展示了拟态神经网络芯片Loihi等尖端科技,通过完全模拟人大脑的电路实现,使得这块芯片无需额外的编程,诞生时刻起就会自我学习,并在一段时间后具有类似3-4岁婴幼儿的智力。只需要将带有这个芯片的U盘样东西插上无人机、接上外接设备,这块芯片就会用它自己理解的方式,尝试收集交互方式,来和外界进行信息交流,并操控对应的实体,使其获得智能。

Intel有如此强大的人工智能技术,他们一定是最能看到未来的公司之一。在会场,作者我有幸会见了Intel中国区副总裁,我主要问了两个问题:

  • 现代人工智能技术已经飞速发展,读研对于提升人工智能应用水平似乎帮助不大,在人工智能领域的学习,是否读研这个问题,参考的指标应该是怎样的?
  • 我们看到Loihi的自我进化能力已经十分可观,这是否预示着未来由人参与具体代码优化的工作将越来越少,那么人类应该增长什么方面的能力来适应人工智能的自我进化呢?

当时这位副总裁用词汇简单的一些英文简要回答了这两个问题。

  1. 他认为,本科生丝毫不会掣肘人工智能的应用水平,本科生的经历丝毫不影响你使用当今开放、成熟的人工智能技术。如果你的目标是如何利用人工智能技术构建伟大产品,那么本科生已经足够。如果你认为,是现在的算法不够好,不够快,需要优化人工智能本身,那么,研究生的舞台可能更加适合你。
  2. 在未来时代人类需要加强的能力,只能是和人工智能自我进化后平齐的能力。人工智能作为一个新一代生命体应该要赋予逐渐与人类某一族群平权的能力。在这样的社会背景下,一切依靠积累多少而成为评价指标的经验将变得毫无价值。但是,创造性的思想,却可以继续和人工智能平起平坐,这就包括:艺术、哲学,等等。

可以看到,由于哲学思想的价值很难用普适统一的标准衡量,这就意味着在许多的领域,依然可以通过哲学思想创新来获得人工智能可能无法触及的价值——即便是在人工智能已经和人类平起平坐的背景下。

当人工智能飞速发展,未来一定会迎来类似文艺复兴的又一次***,人们的思想将得到空前解放。

本书试图可视化在思维方面梳理和创新带来在并发代码工程上的力量。我们专注在如何更加贴合实际发展规律的理解并发,通过可靠的论据和严谨的推理整明理解的正确性,并通过这种理解,配合可能读者不熟悉的,已经经过高层次抽象的Golang并发要素,对以李华的早晨这一案例进行了良好抽象,也为正在阅读本书的你抽象其他需求,快速构建伟大工程奠定了基础。

世界是客观并行的吗?

这是一个可怕的问题。也是在撰写本书中作者我突然发现的一个问题。

回想起李华的早晨这一案例,为让一切的变化有基准遵循,由于直接引用系统时间运算换算过于复杂,我们直接划定了一个最小时间片,通过封装,引入了一个在李华的世界内专用的“时间”协程,这个协程只干一件事情——递增时间的值。

按照朴素的认知,世界是客观并行的。天上飞的飞机,水里游的鱼互不相干。我们也以此为论据,抨击了试图将并发和并行统一看待的人们——即如果他们不相信程序内可能发生的客观并行,非要用微观并发构成宏观并行,则必须理解为世界也不是并行的,因为时间也完全可以用并发设计内一个协程的方式融合进整个系统内,在单线程的情况下,整个序列严格串行,从李华视角来看,这个世界也是客观“并行”的。

但是仔细一想,世界上所有发生的事情全部严格串行,这真的没有可能吗?作者我还真在知乎上找到了一段回答:

这里涉及一个秘密,那就是,这个宇宙其实是单线程的。

对,就像node.js那样,所有看起来同时发生的事件,其实大量的任务都是一个线程之中在轮流切换。

整个宇宙间,遍历所有的对象事件调用完成一遍的时间长度就是普朗克常数。

所以,也就是为什么在普朗克常量的尺度以下会失去宏观的物理意义。

众所周知,每一份能量子可以用hv表达,h就是普朗克常数,v就是辐射电磁波的频率,为什么是频率,其实频率就是宇宙中的一个函数单位时间中被调用的次数。

明白了这个,就会明白为什么会有量子扰动导致不确定性原理,因为当你在观察或计算目标的行为,本身也是在调用宇宙的提供函数,而你调用的函数,由于也用到了目标的资源,于是它就不得不等待你观察占用,然后自身的频率也就造成了影响。

所以,当你没有进行观察时,它是一个频率,而观察时,又会是一个频率,于是就导致了波粒二象性。

光到底是粒子还是波,其实都不是,只是它恰好是绝对速度,所以可能呈现为粒子,可能呈现为波,所以到底如何呈现全在如何调用。

所以,弦论里提及的基本粒子是弦,可以断裂,可以分解,可以合并,其实只不过是很多的子函数在跳转与调用罢了。

像量子隧穿是怎么回事呢?

这个事其实也简单,来看看量子隧穿的出现场景,粒子通过量子势垒时,按说正常情况下当然是过不去的,但是如果你把粒子本身理解成一个函数,而代表粒子这个概念的只是一个函数指针,而量子势垒本身只是一个调度器,所谓的粒子不能穿过势垒,其实是因为进入势垒后,其实指针发生了转移,当你看到一个接触势垒比如被“弹”回来的粒子,你看到的只是它的指针,实际上已经不是那个原来的粒子所指的函数对象了。

任何一个势垒都是会有逃逸现象的,所以当指针转移时,恰好指到了一个会穿越壁垒的对象上,那么就会出现“看到同一个粒子穿过了壁垒”的现象,所以测量中会发现隧穿是“瞬间”发生的。

所以,你认知到的一切事物,包括种种物理规则,不过都是函数计算出来的规则限制而已。

指针存在的另外一个证据,就是量子纠缠啊,凭什么能够超距产生状态联系,其实就是复制的指针,放到了不同的参考系下。

但是量子纠缠为什么为什么那么少见呢,因为大多数情况下拷贝了指针后,迅速就释放了,所有能观察到的量子纠缠,指针都处于延迟释放的状态,所以,量子纠缠对会处于叠加态,只有测量后才能确定状态。

而量子涌现,是大量的虚粒子在真中涌现又显示,其实就是创建的大量指针又释放了,明显就是一个指针池。

至于钟慢效应是怎么回事,大家应该都想到了,原因还是因为宇宙算力有限,所以得限速。

所以对于试图获取更多算力的函数,虽然会让函数内部获取更多的运算能力,但是相应也会在外部减少对它的调用频率

于是速度更快的物体,相对会出现时钟频率会被调慢的现象,在物理上的描述就是更快速度的会导致事件间的间隔相对变长。

所以,相对论的本质,其实就是描述宇宙是怎么限速的。

瞎扯完毕,切莫深思,切莫深思,切莫深思

如果世界是客观严格串行,只有一个线程,通过高效并发设计实现宏观并行错觉,那么根据本书的论点,这个世界将会有如下特征:

  • 效率的优化上限已经被限定死,作为程序内的一员,我们只能追求主观的“无感知”,而不能追求客观上的“高效率”
  • 客观高效率的提升需要寄希望于不受我们控制的,而是控制这个世界的东西增加线程和对应执行的实体,这样世界才有客观多事件并行的能力。

选择权在读者。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务