七周七并发模型1.1 并发还是并行?_七周七并发模型1.1 并发还是并行?试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 七周七并发模型 > 1.1 并发还是并行?

七周七并发模型——1.1 并发还是并行?

并发编程的概念并不新,却直到最近才火起来。一些编程语言,如Erlang、Haskell、Go、Scala、Clojure,也因对并发编程提供了良好的支持,而受到广泛关注。 并发编程复兴的主要驱动力来自于所谓的“多核危机”。正如摩尔定律 所预言的那样,芯片性能仍在不断提高,CPU的速度会继续提升,但计算机的发展方向已然转向多核化 。 Herb Sutter曾经说过:“免费午餐的时代已然终结。” 为了让代码运行得更快,单纯依靠更快的硬件已无法满足要求,我们需要利用多核,也就是发掘并行执行的潜力。 1.1 并发还是并行? 本书的主题是“并发”,那么又为何涉及了“并行”呢?虽然两者有所关联又常被混淆,但并发和并行的含义却是不同的。 一字之差也是差 并发程序含有多个逻辑上的独立执行块 ,它们可以独立地并行执行,也可以串行执行。 并行程序解决问题的速度往往比串行程序快得多,因为其可以同时执行整个任务的多个部分。并行程序可能有多个独立执行块,也可能仅有一个。 我们还可以从另一种角度来看待并发和并行之间的差异:并发是问题域中的概念——程序需要被设计成能够处理多个同时(或者几乎同时)发生的事件;而并行则是方法域中的概念——通过将问题中的多个部分并行执行,来加速解决问题。 引用Rob Pike的经典描述 : 并发是同一时间应对(dealing with)多件事情的能力; 并行是同一时间动手做(doing)多件事情的能力。 那么这本书讲述的是并发还是并行? 小乔爱问: 并发?并行? 我妻子是一位教师。与众多教师一样,她极其善于处理多个任务。她虽然每次只能做一件事,但可以同时处理多个任务。比如,在听一位学生朗读的时候,她可以暂停学生的朗读,以维持课堂秩序,或者回答学生的问题。这是并发,但并不并行(因为仅有她一个人,某一时刻只能进行一件事)。 但如果还有一位助教,则她们中一位可以聆听朗读,而同时另一位可以回答问题。这种方式既是并发,也是并行。 假设班级设计了自己的贺卡并要批量制作。一种方法是让每位学生制作五枚贺卡。这种方法是并行,而(从整体看)不是并发,因为这个过程整体来说只有一个任务。 超越串行编程模型 并发和并行的共同点就是它们比传统的串行编程模型更优秀。 本书将同时涵盖并发和并行(学究可能会给这本书起名为“七周七并发模型和并行模型”, 不过那样的话,封面会变得很难看)。 并发和并行经常被混淆的原因之一是,传统的“线程与锁”模型并没有显式支持并行。如果要用线程与锁模型为多核进行开发,唯一的选择就是写一个并发的程序,并行地运行在多核上。 然而,并发程序的执行通常是不确定的,它会随着事件时序的改变而给出不同的结果。对于真正的并发程序,不确定性是其与生俱来且伴随始终的属性。与之相反,并行程序可能是确定的——例如,要将数组中的每个数都加倍,一种做法是将数组分为两部分并把它们分别交给一个核处理,这种做法的运行结果是确定的。用支持并行的编程语言可以写出并行程序,而不引入不确定性。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《七周七并发模型》其他试读目录

• 1.1 并发还是并行? [当前]
• 1.2 并行架构
• 1.3 并发:不只是多核
• 1.4 七个模型
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •