并发是一种解耦策略。它帮助我们解耦了”做什么”和”何时做”。在单线程应用中,“做什么”和“何时做”是如此紧密地耦合在一起,以至于通常可以通过查看堆栈回溯来确定整个应用的状态。一个调试此类系统的程序员可以设置一个断点,或者一系列断点,并通过哪些断点被触发来了解系统的状态。
解耦”做什么”和”何时做”可以显著提高应用的吞吐量和结构。从结构上看,应用看起来像许多小的协作计算机,而不是一个大的主循环。这可以使系统更容易理解,并提供了一些强大的方法来分离关注点。
神话和误解
- 并发总是提高性能。并发有时可以提高性能,但只有在有许多等待时间可以在多个线程或多个处理器之间共享时。这两种情况都不简单。
- 编写并发程序时,设计不会改变。实际上,并发算法的设计可能与单线程系统的设计截然不同。通常,“做什么”与“何时做”的解耦对系统的结构有巨大的影响。
- 当使用容器(如Web或EJB容器)工作时,理解并发问题不重要。实际上,你最好知道你的容器正在做什么,以及如何防范本章后面描述的并发更新和死锁问题。这里是关于编写并发软件的一些更平衡的声音:
- 并发会带来一些开销,无论是在性能上还是在编写额外代码上。
- 正确的并发是复杂的,即使是简单的问题。
- 并发错误通常不可重复,因此它们经常被忽视为一次性问题,而不是它们真正的缺陷。
- 并发通常需要在设计策略上进行根本性的改变。