首先,我必须声明,我不熟悉并发/并行编程,我的工作是一个web(PHP)开发人员,但我只是对这个主题感兴趣。
我现在正在阅读“七周内的七个并发模型”。
关于第一章,作者指出:
这是不幸的,因为并发程序通常是不确定的--根据事件的精确时间,它们会给出不同的结果。如果您正在处理一个真正的并发问题,那么不确定性是自然的,也是意料之中的。
我不明白为什么并发程序在自然中是非分叉的?有人能给我一个具体的真实的例子吗?
另外,什么是“真正的并发问题”?什么是非真正的并发问题。
顺便问一下,任何初学者的书,并发/并行的书?我不是一个数学/CS大师,所以,请建议一本书的编码例子,而不是整页的理论和数学公式。
我可以读取java/C代码。
发布于 2016-02-26 11:09:12
真正的并发问题通常涉及到与现实世界的交互(现实世界本身由各种不同的事物组成,所有这些都是同时发生的,所以这并不令人惊讶)。
这是一个不可避免的不确定性的现实世界的例子:想象一下你的银行账户里有100美元,两家不同的公司试图同时收取你的借记卡,一家试图收取90美元,另一家80美元。
取决于你的银行电脑里发生的事情的具体细节,这些交易中的一个会“赢”,另一个会被拒绝。你可能会在你的账户里留下10美元,或者你最终会得到20美元。这两种结果都是“正确的”,但你不能预先预测你会得到什么(如果你再次做同样的事情,你可能会得到不同的结果)。
非真正的并发问题通常是由于我们试图并行化应该是一个完全确定的过程(顺便说一句,这就是为什么理解并发性和并行性之间的区别是有帮助的)。书中的一个例子是把0到10000000之间的所有数字相加。答案应该永远是49999995000000。但是,如果我们使用并发工具(例如线程和锁)来创建这个问题的并行实现,并且没有完全正确地实现同步,我们可能会得到(错误的)行为不确定的代码。
https://stackoverflow.com/questions/35641146
复制相似问题