串行(Sequential)、并发(Concurrent)、并行(parallel)与分布式

Table of Contents

1 串行(Sequential)

串行程序中,程序会顺序的执行每一条指令,在整个程序的运行过程中,仅存在一个运行上下文。即一个调用栈,一个堆。
不存在多个运行上下文。

在传统的命令式语言中,如C/C++,Fortran,Java,C#之类,串行执行是根基。

2 并发(Concurrent)

并发是指,程序在运行的过程中存在多于一个的执行上下文。这些执行上下文一般对应着不同的调用栈。

并发概念的出现,主要有几个方面的原因:

  1. 为了更好的反应问题本身的结构。比如图形程序、服务器程序需要同时记录多个任务的运行情况。
    所以,需要同时存在多个上下文。
  2. 为了利用更多的处理器提升性能。
    这个是大家都了解的,这里就不详述了。
  3. 为了更方便的应对独立的物理设备。比如,Google的搜索任务要一堆的机器协作完成的。
    因此需要同时在每个机器上都有一个程序的上下文运行环境。

3 并行(parallel)

在单处理器上,并发程序虽然有多个上下文运行环境,但某一个时刻只有一个任务在运行。
但在多处理器上,因为有了多个执行单元,就可以同时有数个任务在跑。
这种物理上同一时刻有多个任务同时运行的方式就是并行。

和并发相比,并行更加强调多个任务同时在运行。
而且并行还有一个层次问题,比如是指令间的并行还是任务间的并行。

4 分布式(distributed)

分布式在并行处理的基础上,强调任务正在执行的物理设备,如处理器、内存等等硬件,在物理上是分开的。

5 《编译点滴》评

后三个概念涵盖的范围是:并发>并行>分布式。

虽然串行限制了一个栈、一个堆,一个运行上下文,处理器只能死板的按照指令的序列执行。
但,当有多个栈,多个运行上下文时,就有了很多有趣的做法,可以去应对很多有趣的问题。

并行就意味着多个处理器运行多个进程。程序怎么写?bug怎么调?进程怎么通信?等等很多有意思的问题都一下子冒了出来。

时间: 2024-10-10 07:03:20

串行(Sequential)、并发(Concurrent)、并行(parallel)与分布式的相关文章

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结 在GCD函数中, 我们常常碰到同步,异步,串行队列,并发队列,全局队列,主队列等概念,而这些概念又常常组合在一起, 十分头疼, 这篇文章就来梳理一下这些烦人的概念. 不想看长篇大论的, 直接看文章末尾的表格即可! 在此之前, GCD中还涉及到两个十分重要的概念, 就是任务和队列 任务(Task): 你需要执行的操作 队列(Queue): 存放任务的容器 GCD中两个重要的函数, 一个同步执行, 一个异步执行 dispatch_asyn

IOS GCD(线程的 串行、并发 基本使用)

// 凡是函数名种带有create\copy\new\retain等字眼, 都需要在不需要使用这个数据的时候进行release // GCD的数据类型在ARC环境下不需要再做release // CF(Core Foundation)的数据类型在ARC环境下还是需要再做release @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackgrou

浅谈 串行信号 转换成 并行信号 原理

注 :  文中讲述的原理是推理和探讨 , 和现实中的实现不一定完全相同 . 开始之前, 可以先参考看看我之前写的两篇文章 : <设计一个 硬件 实现的 Dictionary(字典)>  https://www.cnblogs.com/KSongKing/p/10193128.html <漫谈 计算机硬件 的 设计 和 实现>  https://www.cnblogs.com/KSongKing/p/9866334.html 原文地址:https://www.cnblogs.com/

JVM_垃圾回收串行、并行、并发算法(总结)

一.串行 JDK1.5前的默认算法 缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长 语法 -XX:+UseSerialGC 新生代.老年代使用串行回收 新生代复制算法 老年代标记-压缩 示例图 测试代码 //-Xmx20m -Xms20m -Xmn2m -XX:+UseSerialGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps byte[] b = null; for (int i = 0; i < 7; i++) { b = new byte

Quartz定时任务的并行与串行

Quartz定时任务的执行策略有并行和串行之分. 所谓并行是指多个任务同时运行的情况,即若两个任务的执行时间存在重叠,两个任务同时运行的情况. 串行则是指一个任务必须等其前一个任务执行完毕之后再执行的策略. Spring集成Quartz时,控制定时任务的并行和串行是通过concurrent(译:同时发生的; 同时完成的; 同时存在的)属性实现的. 当任务系统存在多个定时任务时,任务执行很可能会存在时间上的重叠,通过设置concurrent属性为false,可以避免任务并行执行,job只能在其前一

iOS:转载:同步、异步、并行、串行的详解

理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21日iOSasynchronization.concurrency.GCD.iOS.serial.synchronization.串行.同步.并发.异步 iOS 开发过程中,常常需要用到多线程技术,GCD 是常用的实现多线程的技术,其因简洁底层而备受欢迎. GCD 技术中,同步(synchroniza

(九)串行口方式0 拓展并行输出端口 02 74LS164芯片

1.先讲解74LS164 移位芯片: 74HC164.74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出. 数据通过两个输入端(DSA 或 DSB)之一串行输入:任一输入端可以用作高电平使能端,控制另一输入端的数据输入.两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空. 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度. 主复位 (MR) 输入端上

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)

一.什么是串行?什么是并行? 串行:任务进行排队,一个一个执行: 并行:多个任务齐头并进.   二.单核.多核这两种情况下的并行. 单核情况下的并行:并非真的是多个任务同时进行的,是需要在这任务之间来回切换(即上下文切换)的. 多核情况下的并行:是几核,就能真正做到几核同时执行各自的任务. 三.任务的两大类型. “计算密集型”任务: 特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力. 这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在

串行程序并行化

考虑这样一个问题:统计某个工程的代码行数.首先想到的思路便是,递归文件树,每层递归里,循环遍历父文件夹下的所有子文件,如果子文件是文件夹,那么再对这个文件夹进行递归调用.于是问题很轻松的解决了.这个方案可以优化吗? 了 再回想这个问题,可以发现,循环里的递归调用其实相互之间是独立的,互不干扰,各自统计自己路径下的代码文件的行数.于是,发现了这个方案的可优化点--利用线程池进行并行处理.于是一个串行的求解方案被改进成了并行方案. 不能光说不练,写了一个Demo,对串行方案和并行方案进行了量化对比.

[CSAPP]并发与并行

学了这么久的计算机,并发与并行的概念理解的一直不够透彻.考研复习那会儿,以为自己懂了,然而直到看了CSAPP才算是真正明白了这俩个概念. 并发(concurrency) 流X和流Y并发运行是指,流X在流Y开始之后结束之前开始运行,或者流Y在流X开始之后结束之前开始运行. 如图,进程A与进程B并发,进程A与进程C并发,进程B与进程C非并发. 并行(parallel) 并行是并发的真子集. 并发有可能发生在单处理器上,也可能在多处理器上.流A和流B并行,则流A和流B并发地运行在不同的处理器上. 来自