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


    1 串行(Sequential)

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

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

    2 并发(Concurrent)

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

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

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

    3 并行(parallel)

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

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

    4 分布式(distributed)

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

    5 《编译点滴》评

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

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

    并行就意味着多个处理器运行多个进程。程序怎么写?bug怎么调?进程怎么通信?等等很多有意思的问题都一下子冒了出来。
    希望能有机会和大家一起学习学习:)

  • 相关阅读:
    java集合专题之Collection接口
    ArrayList源码解读
    AKG:攻击者知识图谱(转载)
    kali linux 数字证书安装
    selenium如何添加代理IP?
    盘点一个Python网络爬虫过程中中文乱码的问题
    把一个csv数据文件,第一行头文件(字段名)不变,按某列(第四列)降序排列,另行保存为csv 文件
    盘点一道Pandas中分组聚合groupby()函数用法的基础题
    Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用
    Python匿名函数lambda x: x0 and x1代表的意思是什么...
  • 原文地址:https://www.cnblogs.com/shihao/p/2315496.html
Copyright © 2020-2023  润新知