首先,并行与并发都是程序多线程处理场景,因此,一旦提到并行与并发,那首先想到的是多线程。

1,进程

狭义理解就是操作系统中一段程序的执行过程。那么广义上,进程是指一个具有一定独立功能的程序操作系统中关于某个数据集合进行的一次运行活动。是操作系统程序动态执行的基本单元。在传统的操作系统中,进程既是一个操作系统的基本分配单元,也是操作系统的基本执行单元。

进程共有三种状态:就绪、阻塞和运行

  1. 就绪态:就绪状态是指程序已达到可以运行的状态,只等CPU分配资源就可以运行的状态。
  2. 阻塞态:当程序运行条件没有满足时,需要等待条件满足时候才能执行时所处的状态,如等待i/o操作时候,此刻的状态就叫阻塞态。
  3. 运行态:进程占用CPU,并在CPU上运行。即程序正在运行时所处的状态。

2, 线程

线程是进程中执行运算的最小单元,是操作系统执行处理机制的基本单位。每个进程至少有一个线程,线程可以利用进程所拥有的资源执行调度和运算。

进程与线程的对比

  1. 进程是操作系统资源分配的基本单位,所有与该进程有关的资源,均会被记录在进程控制块PCB中,以表示该进程所拥有的资源。同一进程下的所有线程共享该进程下的所有资源。
  2. 线程是分配处理机的基本单位,与系统资源分配无关。事实上,正在在处理机上运行的是线程,并非进程。
  3. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  4. 线程在执行的时候需要协作同步,不同进程的线程间要利用消息通信方法实现同步。

进程与线程的关系

  1. 进程将CPU资源分给线程,即真正在CPU上运行的是线程。
  2. 操作资源分配给进程,同一进程的所有线程共享该进程的所有资源。

进程与线程的区别

  1. 同一个进程中的线程共享同一内存空间,但是进程之间是独立的。
  2. 同一个进程中的所有线程的数据是共享的(进程通讯),进程之间的数据是独立的。
  3. 对主线程的修改可能会影响其他线程的行为,但是父进程的修改(除了删除以外)不会影响其他子进程。
  4. 线程是一个上下文的执行指令,而进程则是与运算相关的一簇资源。
  5. 同一个进程的线程之间可以直接通信,但是进程之间的交流需要借助中间代理来实现。
  6. 创建新的线程很容易,但是创建新的进程需要对父进程做一次复制。
  7. 一个线程可以操作同一进程的其他线程,但是进程只能操作其子进程。
  8. 线程启动速度快,进程启动速度慢(但是两者运行速度没有可比性)。

3,多进程
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务(多进程)。现代的操作系统几乎都是多进程操作系统,能够同时管理多个进程的运行。 多进程带来的好处是明显的。但是多进程对于系统的资源要求甚高,资源浪费也比较严重。应用多进程场景最多的是windows系统,例如同时打开运行软件,每个软件打开相当于运行一个进程。

4,多线程
在一段完整的代码中,往往会有需要独立的代码模块,而这些独立运行的程序片段叫作“线程”(Thread),利用多个线程编程的概念就叫作多线程处理(多线程编程),多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在程序在同一时间需要完成多项任务的时候实现的。多线程的目的仅仅是为了提高资源利用效率。各个线程执行自己的任务,这些线程可以”同时进行“。同时进行并非同一时刻进行,而是在某一时间段内,完成所有任务,任务的运行有先后顺序。

5,并发

在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥

  • 1,互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
    2,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
    3,同步其实已经实现了互斥,所以同步是一种更为复杂的互斥。
    4,互斥是一种特殊的同步。

微观角度
所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而先后进入队列排队等候执行。

宏观角度
多个几乎同时到达的请求(或线程)在宏观上看就像是同时在被处理。

  • 并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。图中的第一个阶段,在A执行的过程中B,C不会执行,因为这段时间内这个CPU资源被A竞争到了,同理,第二个阶段只有B在执行,第三个阶段只有C在执行。其实,并发过程中,A,B,C并不是同时在进行的(微观角度)。但又是同时进行的(宏观角度)。

6,并行

  • 并行指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU资源上(多核),同时执行。并行,不存在像并发那样竞争CPU资源,等待执行的概念,因为并行状态下的线程分布在不同的CPU上。

7,通过多线程实现并发,并行

  1. 在CPU比较繁忙,资源不足的时候(开启了很多进程),操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会为自己尽量多抢时间片,这就是通过多线程实现并发,线程之间会竞争CPU资源争取执行机会。
  2. 在CPU资源比较充足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是通过多线程实现并行。
  3. 至于多线程实现的是并发还是并行?上面所说,所写多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行,分配过程是操作系统所为,不可人为控制。所有,如果有人问我我所写的多线程是并发还是并行的?我会说,都有可能。
  4. 不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。

并发和并行的区别

进程、线程、多线程、并发、并行学习记录相关推荐

  1. CPU核心数线程数、程序进程线程、并发并行的简单理解

    CPU核心数线程数.程序进程线程.并发并行.简单理解和区分 这篇文章是对上述感念的简单理解,想深入研究可以看看<计算机组成原理> CPU的核心数 线程数 当我们买电脑的时候,会看到CPU的 ...

  2. CPU核心数线程数、程序进程线程、并发并行

    核心数(物理概念) 8核:有8个相对独立的CPU核心单元组,这是物理概念,也就是说1个CPU有 8个独立的小CPU,物理上只能同时处理8个任务,也就是物理上是8核8线程. 线程数(逻辑概念) 既然物理 ...

  3. 易语言多线程大漠多线程进程线程多线程

    进程-线程-多线程 1.进程(process) 狭义定义:进程就是一段程序的执行过程 简单的来讲进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域( ...

  4. python多线程并发_Python进阶记录之基础篇(二十四)

    回顾 在Python进阶记录之基础篇(二十三)中,我们介绍了进程的基本概念以及Python中多进程的基本使用方法.其中,需要重点掌握多进程的创建方法.进程池和进程间的通信.今天我们讲一下Python中 ...

  5. 多CPU/多核/多进程/多线程/并发/并行之间的关系

    多CPU,多核,多进程,多线程 当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位(调度单位). 3.一 ...

  6. 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)

    文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...

  7. Java并发编程学习记录

    Java并发编程汇总 并发问题的分解 多线程并发的特性 volatile 在并发编程中可能出现的问题: 管程 wait() 的正确姿势 notify() 何时可以使用 在使用多线程编程的时候,开启多少 ...

  8. Python_进程/线程/多线程理解

    目录 进程.线程.多线程: 1.进程与线程区别 (1)进程与线程区别 (2)多进程与多线程区别 (3)更多区别 2. 进程简单理解 3. 线程简单理解 进程.线程.多线程: 进程:资源分配的最小单位. ...

  9. c# 多线程 执行事件 并发_C#.NET Thread多线程并发编程学习与常见面试题解析-1、Thread使用与控制基础...

    前言: 因为平时挺少用到多线程的,写游戏时都在用协程,至于协程那是另一个话题了,除了第一次学习多线程时和以前某个小项目有过就挺少有接触了,最近准备面试又怕被问的深入,所以就赶紧补补多线程基础. 网上已 ...

最新文章

  1. 曾是谷歌程序员,抛下百万年薪创业,4 年成就 7 亿用户,今身价百亿!
  2. eclipse中用maven多模块管理,然后主项目无法调用其他被依赖项目里的方法,解决办法
  3. 华为敏捷 DevOps 实践:产品经理如何开好敏捷回顾会议
  4. 稀疏性和L1正则化基础 Sparsity and Some Basics of L1 Regularization
  5. sqlserver2008 安装时需要重启的解决办法
  6. Spring aop面向切面编程概述
  7. python好玩的代码_一行 Python 能实现什么丧心病狂的功能?
  8. 苏杰专访:产品创新好方向=几十年不变的需求+硬科技赋能
  9. 我免费发布的东西,你拿去卖钱,我不平衡
  10. ADO.NET访问数据集的表、行和列
  11. windows 下搭建 git 服务器 gogs
  12. 【BZOJ 1082】[SCOI2005]栅栏 二分+dfs
  13. PyQt4--QPushButton(click)类的信号
  14. GPS经纬度差值对应地面距离多少米
  15. Stata软件做门槛回归模型(汉森个人主页上的代码)
  16. macd java 源代码_改良智能MACD指标公式及源代码
  17. matlab对频谱傅里叶逆变换,基于功率谱的傅里叶逆变换问题
  18. 如何求七参数以及七参数在软件中的应用
  19. 冯雪 手术机器人的应用_外科手术机器人发展及其应用
  20. leetcode-回溯

热门文章

  1. PowerShell收发TCP消息包
  2. Oracle之物化视图
  3. 7个建议帮你完成更多的工作
  4. JSP实现小区物业管理系统
  5. jsp的内置对象Exception
  6. 突然想写一篇有关欧拉函数的博客
  7. Django学习笔记之Django ORM Aggregation聚合详解
  8. 【转】Hadoop分布式集群搭建hadoop2.6+Ubuntu16.04
  9. JavaScript的DOM操作-重点部分-第一部分
  10. Scrum Meeting---Four(2015-10-28)