Java编程思想之并发

189 阅读10分钟

1.并发和并发

a.并发的结果是并行,并行指的是程序的状态,并发指程序的结构
b .并发是并行的子集,有多种level可以实现并行,并发是其中一种。
level:
Bit-Level Parallelism 位级别并行
Instruction-Level Parallelism 指令级并行
Data Parallelism 单操作,多数据 (例如图像处理是处理一个图上的所有像素)
Task-Level Parallelism 多线程并发
其中位级并行,数据级并行都不是并发的,但是是并行的
c.并行与并发概念区分:
判断这个程序处于并行的状态:同一时间有两个“工作单位”同时执行,单线程不可能实现并行
判断这个程序是并发的条件是:多个操作可以在重叠的时间段内进行,
这句话的重点有两个。我们先看“(操作)在重叠的时间段内进行”这个概念。它是否就是我们前面说到的并行呢?是,也不是。并行,当然是在重叠的时间段内执行,但是另外一种执行模式,也属于在重叠时间段内进行。这就是协程
协程中重叠的时间的概念:
01a37fd3d49e1ee5ce52ef0e395b7361.jpeg
task1与task2是两段不同的代码,在每一个具体的时间点上都只有一个程序在执行。但他们在一段重叠的时间段。
task1和task2的执行有点类似多线程,但是协程是在一个线程内执行。所以,单核单线程可以支持并发。
总结:
并行指物理上同时执行,并发指能够让多个任务在逻辑上交织执行的程序设计
应用级并发程序:
现代计算机提供了三种基本的构造并发程序的方法:
1.进程:
2,I/O多路复用
3.线程