目录

  • 基础知识介绍
  • 进程详解
    • 概念
    • 计算机中的表示方法
    • 调度状态
  • 线程详解
    • 概念
    • 状态转换
  • 进程与其他概念的一些异同
    • 特点
    • 进程与线程之间的联系
    • 进程与线程之间的区别
    • 进程与程序之间的区别

基础知识介绍

  • CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。
  • CPU太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。
  • 执行一段程序代码,实现一个功能的过程介绍,当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。
  • 一段程序的执行过程:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文

进程详解

概念

进程,顾名思义,就是正在进行的程序,是一个动态的过程。或者我们可以简单的把进程理解为程序的代码块儿+程序执行所需数据

计算机中的表示方法

在计算机中,我们使用三部分来描述计算机的进程

  • 程序段:描述进程所要完成的功能,是进程执行时不可修改的部分
  • 数据段:程序执行时所需要的数据和工作区,为一个进程专用,可修改
  • PCB:包含进程的描述信息和控制信息,是进程的动态特性的集中反应

调度状态

不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样的。包括以下三种:

  • 运行态:进程占用CPU,并在CPU上运行;
  • 就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
  • 阻塞态:进程因等待某件事发生而暂时不能运行;

进程在一生中,都处于上述3中状态之一。

进程状态之间是如何实现转换的:

  • 运行–>就绪:这是由调度引起的,主要是进程占用CPU的时间过长
  • 就绪–>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行–>阻塞:发生了I/O请求或等待某件事的发生
  • 阻塞–>就绪:进程所等待的事件发生,就进入就绪队列
  • 阻塞–>运行:即使给阻塞进程分配CPU,也无法执行,操作系统載进行调度时不会載阻塞队列进行挑选,其调度的选择对象为就绪队列:
  • 就绪–>阻塞:因为就绪态根本就没有执行,何来进入阻塞态?

也就是说,后面的两种转换实际上是不可能发生的。

线程详解

概念

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。

状态转换

  • 新生状态(New):当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,此时该线程处于新生状态。此时线程不是活着的(not alive);
  • 就绪状态(Runnable):通过调用线程实例的start()方法来启动线程使线程进入就绪状态;但还没有被分配到CPU,处于线程就绪队列;此时线程是活着的(alive);
  • 运行状态(Running):一旦获取CPU,线程就进入运行状态,线程的run()方法才开始被执行;如果在给定的时间内没有执行结束,就会被系统给换下来回到线程的就绪状态;此时线程是活着的(alive);
  • 阻塞状态(Blocked):通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞状态; 此时线程是活着的(alive)
  • 死亡状态(Dead):当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡状态。
    线程状态转换图

进程与其他概念的一些异同

进程和线程都是程序执行的过程,但进程是程序执行从始到终一个完整的执行过程,而线程是只进程中的一个运行流程,一个进程中可以有多个线程。我们来看图解:

  • 进程:进程所描述的过程就是这三个部分加起来的总和。
  • 线程:把中间那块儿对A的执行过程再细分,每一个执行流程就是线程。线程本身是没有上下文资源的,但是他可以使用它所属的进程的资源。

特点

1、进程的特点
是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。
2、线程的特点
线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。

进程与线程之间的联系

1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
4、处理机分给线程,即真正在处理机上运行的是线程。
5、线程是指进程内的一个执行单元,也是进程内的可调度实体。

进程与线程之间的区别

1、调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
2、并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
3、拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

进程与程序之间的区别

  • 进程是动态的,程序是静态的。程序是有序代码的集合,进程是程序执行的过程。
  • 进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可永久保存。
  • 进程与程序的对应关系。通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
  • 进程和程序的组成不同。进程的组成包括程序,数据和PCB。

进程与线程之间的区别与联系相关推荐

  1. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

    1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...

  2. 管程,进程及线程之间的区别

    1,首先我们先了解进程.线程.管程各自的概念: 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基 ...

  3. 程序、进程、线程之间的区别

    1.   .net的公共语言运行时(CLR)能够区别两种不同类型的线程:前台线程和后台线程.前台线程与后台线程的区别: 应用程序必须运行完所有的前台线程才可以退出.而对于后台线程,应用程序则可以不考虑 ...

  4. Python多任务(8.进程与线程之间的区别以及多进程和多线程的区别 )

    1. 进程.线程的对比 进程,能够完成多任务,比如:  一台电脑上可以运行登录多个QQ 线程,能够完成多任务,比如: 一个QQ中可以和有多个聊天窗口 进程里面包含线程,线程不能够独立执行,必须依存在进 ...

  5. 进程与线程之间的区别及联系

    一.定义:     1.进程:进程是一个具有独立功能的程序关于某个数据集合的以此运行活动. 是系统进行资源分配和调度的独立单位,也是基本的执行单元.是一个动态的概念,是一个活动的实体.它不只是程序的代 ...

  6. 任务、进程、线程之间的区别

    任务(task) 任务是最抽象的,是一个一般性的术语,指由软件完成的一个活动.一个任务既可以是一个进程,也可以是一个线程.简而言之,它指的是一系列共同达到某一目的的操作.例如,读取数据并将数据放入内存 ...

  7. Java进程和线程关系及区别

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  8. apply_async进程不执行_c/c++面试精选题(八)简单回答,进程和线程关系及区别...

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  9. 进程和线程关系及区别

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  10. Linux--进程和计划任务管理 理论干货+实操(程序,进程,线程之间关系的详解,静态与动态查看进程方式,控制进程的 方式,一次性任务与周期性任务的设置)

    文章目录 前言 一:程序,进程,线程之间的关系 1.1:进程概述 1.2:应用程序,进程和线程的关系 1.2.1:程序和进程的关系 1.2.2:进程和线程的关系 二:查看进程 2.1:静态查看 ps命 ...

最新文章

  1. 李飞飞团队加入AI抗疫:家用监控系统,可以远程反馈新冠症状
  2. 栈的应用--进制转换
  3. 树结构遍历节点名字提取,这里提取的是el-tree数据结构,封装成函数
  4. woocommerce 分类到菜单_Woocommerce商店显示分类
  5. Mysql学习总结(9)——MySql视图原理讲解与使用大全
  6. libz.dylib的研究 libz.1.2.5.tbd
  7. .NET方向高级开发人员面试时应该事先考虑的问题
  8. 【C++标准库】字符串
  9. Maven的pom.xml文件详解
  10. 室内三维地图编辑器,制作地图软件哪个最好
  11. VS2015 Visual Assist X破解版安装、禁用、卸载方法
  12. Unity中的Compute Shader
  13. Android 百度地图经纬度精确位数,百度map定位 为什么经纬度是准确的 而在map上标注却偏离很远...
  14. 如何解决更新windows10后兼容性助手显示Vmware不能在Windows上运行的问题?
  15. 物理像素,设备独立像素等等收录链接
  16. 计算机病毒查杀功能软件有哪些,计算机病毒查杀方法
  17. 1、IG夺冠,校长送钱
  18. Oracle 表空间收缩
  19. java中的对称加密算法和非对称加密算法
  20. nodejs写入json文件,格式化输出json的方法

热门文章

  1. 深度学习模型高并发方案
  2. Netty in action—第一个Netty应用
  3. 所以,我们依然要读书
  4. 3.1 RNN 循环神经网络 概述(下篇)
  5. PGM:贝叶斯网表示之朴素贝叶斯模型naive Bayes
  6. python操作mysql时mysqldb和pymysql的安装和使用
  7. Python模块:生成随机数模块random
  8. php 放大镜代码,jQuery实现放大镜效果实例代码_jquery
  9. Dart中dynamic,var,object三者的区别
  10. JSP — 如何设置jsp中cookie的过期时间