首先,我必须声明,我不熟悉并发/并行编程,我的工作是一个Web(PHP)开发人员,但我只是对这个主题感兴趣。
我正在阅读“七周七个并发模型”。
在第一章中,作者说:
这很不幸,因为并发程序经常出现 不确定性 - 根据事件的确切时间,它们会给出不同的结果。如果您正在处理真正并发问题,那么非确定性是自然而且可以预期的。
我不明白为什么并发程序在自然界中是非贬义的? 任何人都可以给我一个具体的实际例子吗?
此外,什么是“真正并发问题”?什么是非真正并发的问题。
顺便说一句,任何兼容/并行书的初学者书?我不是数学/ CS大师,所以,请推荐一本带有编码示例的书,而不是完整的理论和数学公式。
我可以阅读java / C代码
答案 0 :(得分:2)
真正的并发问题通常涉及与现实世界的互动(现实世界本身由各种不同的东西组成,所有这些都同时发生,所以这不应该是令人惊讶的。)
这是一个不可避免的非确定性的真实例子:想象一下,你的银行账户里有100美元,两个不同的公司试图在同一时间向你的借记卡收费,一个试图拿90美元,另外80美元。 / p>
根据银行计算机内发生的具体细节,其中一项交易将“获胜”,另一项将被拒绝。您最终可能会在帐户中留下10美元,或者最终可能会花费20美元。这两个结果都是“正确的”,但你无法事先预测到你会得到什么(如果你再做同样的事情,你可能得到不同的结果)。
非真正并发问题通常是由于我们尝试并行化应该是一个完全确定的过程(顺便说一句,这就是为什么它有助于理解并发和并行之间的区别)。本书中的一个例子是将0到10000000之间的所有数字相加。答案应始终为49999995000000.但是如果我们使用并发工具(如线程和锁)来创建此问题的并行实现,并且没有完全正确 的同步,我们最终可能会得到(错误地)非确定性行为的代码。