校订 并发编程-前言部分 issue #413

This commit is contained in:
LingCoder
2020-05-29 06:00:50 +08:00
parent 2c4185761e
commit 8f103177d1

View File

@@ -3,27 +3,28 @@
<!-- Concurrent Programming -->
# 第二十四章 并发编程
>爱丽丝:“但是我不想进入疯狂的人群中
>爱丽丝:“我可不想到疯子中间去
>
>猫咪:“oh你无能为力我们都疯了我疯了,你也疯了”
>猫咪:“啊,那就无办法了,我们这都是疯子。我疯了,你也疯了”
>
>爱丽丝:“你怎么知道我疯了”。
>
>猫咪:“你一定疯了,否则你不会来到这里”——爱丽丝梦游仙境 第6章。
>猫咪:“你一定疯了,否则你不会来这儿” ——爱丽丝梦游仙境 第6章。
到目前为止我们一直在编程就像文学中的意识流叙事设备一样首先发生一件事然后是下一件事。我们完全控制所有步骤及其发生的顺序。如果我们将值设置为5那么稍后会回来并发现它是47这将是非常令人惊讶的。
我们现在进入了一个奇怪的并发世界,在此这个结果并不令人惊讶。你信赖的一切都不再可靠。它可能有效,也可能无效。很可能它只会在某些条件下有效。你必须知道和了解这些情况以确定哪些有效
在本章之前我们惯用一种简单顺序地叙事方式来编程有点类似文学中的意识流第一件事发生了然后是第二件第三件……总之我们完全掌握着事情发生的进展和顺序。如果将值设置为5结果再看时它已变成47的话这就很匪夷所思了
作为类比,你的正常生活是在牛顿力学中发生的。物体具有质量:它们会下降并转移它们的动量。电线具有阻力,光线可以直线传播。但是,如果你进入非常小、热、冷、或者大的世界(我们不能生存),这些事情会发生变化。我们无法判断某物体是粒子还是波,光是否受到重力影响,一些物质变为超导体
现在,我们来到了陌生的并发世界。对于这样的结果一点都不奇怪。你原来信赖的一切都不再可靠。它可能有效,也可能无效。更可能得是,它在某些情况下会起作用,而在另一些情况下则不会。只有了解了这些情况,我们才能正确地行事
假设我们在同时多条故事线进行的间谍小说里,而非单一意识流地叙事。第一个间谍在特殊的岩石处留下了微缩胶片。当第二个间谍过来准备取回包裹时,胶片可能已被第三个间谍带走了。但是小说并没有交代此处的细节。直到故事结尾,我们都没搞清楚这里到底发生了什么
作为类比,我们正常生活是发生在经典牛顿力学中的。物体具有质量:会落下并转移动量。电线有电阻,光直线传播。假如我们进入极小、极热、极冷、或是极大的世界(我们不能生存),这些事情会发生变化。我们无法判断某物体是粒子还是波,光是否受到重力影响,一些物质会变为超导体
构建并发应用程序非常类似于游戏 [Jenga](https://en.wikipedia.org/wiki/Jenga),每当你拉出一个块并将其放置在塔上时,一切都会崩溃。每个塔楼和每个应用程序都是独一无二的,有自己的作用。你从构建系统中学到的东西可能不适用于下一个系统
假设我们处在条故事线并行的间谍小说里,而非单一意识流地叙事。第一个间谍在某个特别的岩石底下藏了微缩胶片。当第二个间谍来取回包裹时,胶片可能已被第三个间谍带走了。小说并没有交代此处的细节。所以直到故事结尾,我们都没搞清楚到底发生了什么
本章是对并发性的一个非常基本的介绍。虽然我使用了最现代的 Java 8 工具来演示原理,但这一章远非对该主题的全面处理。我的目标是为你提供足够的基础知识,使你能够把握问题的复杂性和危险性,从而安全的通过这些鲨鱼肆虐的困难水域
构建并发应用好比[搭积木](https://en.wikipedia.org/wiki/Jenga)。每拉出一块放在塔顶时,整个都可能会崩塌。每个积木塔和应用程序都是独一无二的,有着自己的作用。你在某个系统构建中学到的东西并不一定适用于下一个系统
对于更麻烦和底层的细节,请参阅附录:[并发底层原理](./Appendix-Low-Level-Concurrency.md)。要进一步深入这个领域,你还必须阅读 *Brian Goetz* 等人Java Concurrency in Practice》。尽管在撰写本文时该书已有十多年的历史了但它仍然包含我们必须了解和理解的要点。理想情况下本章和上述附录是阅读该书的良好前提。另外*Bill Venner* 的 《Inside the Java Virtual Machine》也是很有价值的资源。它详细描述了 JVM 的内部工作方式,包括线程
本章是对并发的基本介绍。虽然我们用到了现代的 Java 8 工具来演示原理,但本章还远未全面论述并发。我的目标是为你提供足够的基础知识,你能够把握问题的复杂性和危险性,从而安全地渡过这片鲨鱼肆虐的困难水域
更多麻烦和底层的细节,请参阅附录:[并发底层原理](./Appendix-Low-Level-Concurrency.md)。要进一步深入这个领域,你还必须阅读 *Brian Goetz* 等人的 《Java Concurrency in Practice》。在撰写本文时该书已有十多年的历史了但它仍包含我们必须了解和明白的知识要点。理想情况下本章和上述附录是阅读该书的良好前提。另外*Bill Venner* 的 《Inside the Java Virtual Machine》也很值得一看。它详细描述了 JVM 的内部工作方式,包括线程。
<!-- The Terminology Problem -->