使用并发的目的,不仅仅是为了让程序并行运行从而发挥多核的优势。若正确使用并发,程序还将获得以下优点:及时响应、高效、容错、简单。 并发的世界,并发的软件 世界是并发的,为了与其有效地交互,软件也应是并发的。 手机可以同时播放音乐、上网浏览、响应触屏动作。我们在IDE中输入代码时,IDE正在后台悄悄检查代码语法。飞机上的系统也同时兼顾了好几件事情:监控传感器、在仪表盘上显示信息、执行指令、操纵飞行装置调整飞行姿态。 并发是系统及时响应的关键。比如,当文件下载可以在后台进行时,用户就不必一直盯着鼠标沙漏而烦心了。再比如,Web服务器可以并发地处理多个连接请求,一个慢请求不会影响服务器对其他请求的响应。 分布式的世界,分布式的软件 有时,我们要解决地理分布型问题。软件在非同步运行的多台计算机上分布式地运行,其本质是并发。 此外,分布式软件还具有容错性。我们可以将服务器一半部署在欧洲,另一半部署在美国,这样如果一个区域停电就不会造成软件整体不可用。下面就介绍容错性 。 不可预测的世界,容错性强的软件 软件有bug,程序会崩溃。即使存在完美的没有bug的程序,运行程序的硬件也可能出现故障。 为了增强软件的容错性,并发代码的关键是独立性和故障检测。独立性是指一个故障不会影响到故障任务以外的其他任务。故障检测是指当一个任务失败时(原因可能是任务崩溃、失去响应或硬件故障),需要通知负责故障处理的其他任务来处理。 串行程序的容错性远不如并发程序。 复杂的世界,简单的软件 如果曾经花费数小时纠结在一个难以诊断的多线程bug上,那你可能很难接受这个结论,但在选对编程语言和工具的情况下,比起串行的等价解决方案,一个并发的解决方案会更简洁清晰。 在处理现实世界的并发问题时,这个结论可以得到印证。用串行方案解决一个并发问题往往需要付出额外的代价,而且解决方案会晦涩难懂。如果解决方案有着与问题类似的并发结构,就会简单许多:我们不需要创建一个复杂的线程来处理问题中的多个任务,只需要用多个简单的线程分别处理不同的任务即可。
七周七并发模型——1.3 并发:不只是多核
书名: 七周七并发模型
作者: Paul Butcher
出版社: 人民邮电出版社
原作名: Seven Concurrency Models in Seven Weeks: When Threads Unravel
译者: 黄炎
出版年: 2015-3
页数: 244
定价: 49.00元
装帧: 平装
ISBN: 9787115386069