知识卡片

正确性与灵活性是并发设计永恒的权衡

普通读书笔记卡

内容

更新丢失和不一致读都属于正确性(安全性)层面的失败——只要严格规定同一时刻只允许一个人操作某份数据,这两个问题理论上都能被彻底消灭。但这个”解法”的代价是把并发处理的灵活性(有多少并发活动能同时进行)压到最低,因此对任何并发系统而言,光谈正确性是不够的:正确性和灵活性是一对此消彼长的量,具体牺牲多少正确性去换取多少灵活性,要看失败一旦发生的严重程度、失败发生的可能性,以及业务对并发处理数据的实际需求有多迫切。并且解决方案本身也不是免费的午餐——任何用来防止更新丢失/不一致读的控制机制,都会引入它自己的一套新问题(虽然通常没有原来那么严重)。这也带来一个容易被忽视的推论:如果某个场景本身能容忍偶尔发生更新丢失或不一致读(后果轻微、发生概率低),那么完全可以不引入任何并发控制机制——这种情况虽然少见,但确实存在,不必为了”理论正确”而对所有数据一视同仁地上锁。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第5章 并发"之"5.1 并发问题"(源文件:_epub-src/OEBPS/Text/000030.html) - 结论依据:原文说明"如果没有两个人同时对相同的数据进行操作,则这种错误的行为不会发生。然而,如果只需要考虑正确性,情况还不会很严重。可以安排在同一时刻只有一个人可以对数据进行操作。这样做可以保证正确性,但却削弱了并发处理的灵活性……人们常常需要牺牲一些正确性以获取更多的灵活性,这取决于失败的严重性和可能性以及人们对并发处理数据的需求",直接支撑本卡结论。 - 原始内容:如果可以忍受原来那些基本问题,那么就可以避免任何形式的并发控制。虽然这种情况比较稀少,但偶尔有一些环境还是允许这样。