雷子聊并发编程(001):基础知识之串行&并行&并发
前言
编写正确的程序很难,而编写正确的并发程序则难上加难。与串行程序相比,在并发程序中存在更多容易出错的地方。那么,为什么还要编写并发程序?原因很简单,能充分发挥与利用多处理器系统的强大计算能力。
在开始进入并发编程的编码学习之前,掌握必要的基础知识有助于并发编程底层源码部分的理解。因此,必须拎出来与大家好好聊上一聊。
什么是串行?
串行是指两个或者多个事件在顺序发生。串行单处理器与多处理器系统中都存在。
1.1 示意图

A线程将两个任务顺序执行。
1.2 举例
Anna给A、B两个学生辅导。Anna给A辅导后,安排A做作业。等A完成作业后,开始给B辅导。等B辅导后,安排B做作业,等B完成作业后,完成整个任务。
什么是并发?
并发是指两个或多个事件在同一时间间隔发生,也可以理解成交替做不同事情或不同的代码块交替执行。并发单处理器与多处理器系统中都存在。
2.1 示意图

单核CPU,4个任务。虽然开启4个线程执行,但是处理核只能同一时间执行单个线程。
上图的并发仅仅意味着线程随着时间推移交错执行(上图),充分利CPU空闲时间。
2.2 举例
Anna给A、B、C三个学生辅导。Anna给A辅导后,安排A写作业。A写作业的时候,Anna给B辅导后,安排B写作业。B写作业的时候,Anna给C辅导。趁空闲时间交替工作。
什么是并行?
并行是指两个或者多个事件在同一时刻发生,也可以理解成同时做不同事情的能力或不同的代码块同时执行。并行在多处理器系统中存在。
3.1 示意图

3.2 举例
Anna给A、B、C三个学生辅导。Anna请了两个老师,三个老师同时给A、B、C三个学生辅导。
最后
综上,得知并发且并行的执行效率很高。实现方式是开启多线程,那多线程又是什么东西?与多线程紧密关联的还有哪些?
扫一扫二维码关注,也许我们可以更深入...

雷子聊并发编程(001):基础知识之串行&并行&并发的更多相关文章
- 串行&并行&并发,同步&异步
1. 串行&并行&并发 1.1 串行 这个非常好理解,字面意思,像串成一个串一样,顺序执行 上一个没执行完的话,后面的就必须无条件等待 一般情况就是一个线程里:任务一个接一个执行,类似 ...
- GC算法之串行并行并发
串行收集器: 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器也可以用在小数据量(100M左右)情况下的多 ...
- Java并发编程笔记—基础知识—实用案例
如何正确停止一个线程 1)共享变量的使用 中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务.线程必须周期性的核查这一变量(尤其在 ...
- Python 之并发编程之进程上(基本概念、并行并发、cpu调度、阻塞 )
一: 进程的概念:(Process) 进程就是正在运行的程序,它是操作系统中,资源分配的最小单位. 资源分配:分配的是cpu和内存等物理资源 进程号是进程的唯一标识 同一个程序执行两次之后是两个进程 ...
- C#基础知识回顾--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上, 在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性, ...
- C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)
异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- 为什么TCP比UDP可靠真正原因,以及并发编程的基础问题
一 为什么TCP协议比UDP协议传输数据可靠: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程涉及到计算机硬件,也就是物 ...
- java第九节 网络编程的基础知识
/** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...
随机推荐
- Sentinel基本概念
Sentinel是阿里开源的一款高性能的限流框架.这里将对Sentinel的使用和实现进行介绍. 这里先介绍下Sentinel中涉及到的基本概念,包括使用上或者实现上.主要是笔者在阅读文档和源码时 ...
- 基于Coravel定时任务之物联网设备数量统计
目录 基于Coravel定时任务之物联网设备数量统计 1 应用背景 2 对比各家定时库 2.1 TaskScheduler 2.2 Fluent Scheduler 2.3 Quartz.net 2. ...
- Maven 梳理 -聚合与继承
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...
- 使用 .gitignore 忽略 Git 仓库中的文件
.gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或 ...
- Ocelot自定义管道中间件
Ocelot是啥就不介绍了哈,网关大家都知道,如果大家看过源码会发现其核心就是由一个个的管道中间件组成的,当然这也是Net Core的亮点之一.一个请求到来,会按照中间件的注册顺序进行处理,今天的问题 ...
- elasticsearch http 搜索 测试
1.查询所有的documents http://192.168.43.45:9200/_search boost parameter 细粒度搜索条件权重控制 如:组装多个查询条件,其中一个匹配的想要优 ...
- [Redis] Redis的基本数据结构
key-value 通过key获取或设置value SET key value GET key SET server:name "fido" GET server:name SET ...
- [Note] Windows 10 Python 3.6.4 安装scrapy
直接使用pip install安装时会在安装Twisted出错,以下主要是解决Twisted的安装问题 1. 安装wheel pip install wheel 2. 安装Twisted 在Pytho ...
- Java 学习笔记之 方法内的临时变量是线程安全
方法内的临时变量是线程安全: 方法内部的私有变量,是线程安全的. public class HasSelfPrivateNum { public void addI(String username) ...
- 链表二:链表中倒数第k个结点
题目:链表中倒数第k个结点描述:输入一个链表,输出该链表中倒数第k个结点.解决方案:思路: 根据规律得出倒数第k个节点是 n-k+1个节点 方法一:先计算出链表的长度,在循环走到n-k+1步.(相当于 ...