java 并发编程笔记:01. 并行与并发 —— 概念

15
01. 并并并并并 并并

Upload: tao-he

Post on 21-Jan-2017

140 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Java 并发编程笔记:01. 并行与并发 —— 概念

01. 并行与并发概念

Page 2: Java 并发编程笔记:01. 并行与并发 —— 概念

并行与并发•并发性,说的就是多件事情能够同时进行(并行)的一种能力。•要点:并发是性质,并行是状态。并行的事情具有并发性,但是具有并发性的事情不一定并行地进行;具有并发性的事件不一定并行地进行。

Page 3: Java 并发编程笔记:01. 并行与并发 —— 概念

并发编程的抽象•并发编程基于下面这种抽象模型,包含了三要素:• 数据• 线程• 任务

Page 4: Java 并发编程笔记:01. 并行与并发 —— 概念

数据•并发编程的难点• 数据需要在不同的线程之间共享,因为多线程程序在运行时存在交错( interleaving),不加限制共享就会带来数据读写的错误。所有的并发编程设施和理论都是基于这个起源来搭建。

Page 5: Java 并发编程笔记:01. 并行与并发 —— 概念

数据 -存储分类• Immutable(线程安全)• Mutable

• 原子存储( Atomic)• 固定存储( Java原生数组)• 动态存储(动态申请)

Page 6: Java 并发编程笔记:01. 并行与并发 —— 概念

数据 -关注点• 并发编程中我们更关注数据的生命周期和共享策略,即数据什么时候创建,什么时候读取,什么时候更新,什么时候销毁释放。• 这些问题在并发编程中如果没有妥善地设计,会带来非常多难以重现和调试的问题,而资深的软件工程师,都会在这些问题上有深入的理解和长期的经验。

Page 7: Java 并发编程笔记:01. 并行与并发 —— 概念

数据 -关注点• 我们也需要了解

• 多线程环境中一门语言的内存模型• 数据的生命周期

• 也需要回答• 什么级别的操作即使我们不用锁也是线程安全的?• 使用那些并发工具才能保证线程安全?

Page 8: Java 并发编程笔记:01. 并行与并发 —— 概念

线程•每个语言都有一套机制,负责线程的创建、运行、切换和结束•并发编程三范式• Procedural• Functional• CSP ( Communicating Sequential Processes)

Page 9: Java 并发编程笔记:01. 并行与并发 —— 概念

线程 -Procedural范式•以 C语系( C++、 Java)为代表的过程式编程语言,它在处理并发编程时,通常是通过同步工具来进行的•并发同步工具抽象级别由高到低

1. BlockingQueue、 TaskQueue、 CountDownLatch、 Reader-Writer Lock2. Mutex、 Conditional Variable、 Future、 Promise3. lock-free、 atomic、 spin lock

Page 10: Java 并发编程笔记:01. 并行与并发 —— 概念

线程 -Functional范式•函数当成语言里的一等公民来对待,以提供更高的抽象能力•核心概念

• IMMUTABLE• LAMBDA CALCULUS• NO SIDE EFFECT• HIGHER ORDER FUNCTIONS• PATTERN MATCHING• LAZY EVALUATION• CURRYING

•参考• https://www.coursera.org/learn/programming-languages

Page 11: Java 并发编程笔记:01. 并行与并发 —— 概念

线程 -CSP ( Communicating Sequential Processes)•提供类似 Go语言的机制•通过一种类似于通信管道的方式来做线程的同步•让并发编程的设计更容易,出 bug的可能性更小•核心观点• Do not communicate by sharing memory; instead, share memory by

communicating

Page 12: Java 并发编程笔记:01. 并行与并发 —— 概念

任务•任务与线程的关系• 一个线程,可以在它的生命周期里处理数亿个任务

•抽象来看,一个任务,它包含• 前序——前置任务依赖;• 读——输入、共享数据读;• 计算——执行的计算和操作;• 输出——共享数据写;• 后续——后续任务通知

•即任务五要素:前序、读、计算、写、后续

Page 13: Java 并发编程笔记:01. 并行与并发 —— 概念

任务•五要素充分决定:自动化任务的调度策略。•实际情况是,对于具体任务需要• 手工编码调度策略,• 决定同步工具,• 熟悉底层原理,• 量化估算性能。

Petri 网自动并发调度

heth
Page 14: Java 并发编程笔记:01. 并行与并发 —— 概念

小结•并发编程核心技术• 数据共享• 线程间任务顺序• 线程的管理• 任务的抽象与封装

Page 15: Java 并发编程笔记:01. 并行与并发 —— 概念

思考题•列出你知道的语言是如何为并发提供支持的?它们有什么区别?