学习过操作系统(下面简称OS)的都清楚,计算机计算的核心是CPU,操作系统是计算机资源的管理者 同事也是软硬件之间的接口。为了实现程序的并发,而引入了进程的概念。
在传统OS中,进程是个很重要的概念,它是系统能够独立分配资源、接受调度和运行的基本单位。进程使得程序能够并发执行,且得以控制。

进程

进程是是计算机中具有一定独立功能程序在某数据集合上的一次动态执行过程,是系统进行资源分配和调度的基本单位。

进程是一个“执行中的程序”,是程序的实体,有自己独立的地址空间。进程一般有程序段、数据段及进程控制块构成,即进程实体。

进程实体:程序段、数据段和PCB(Process Control Block)。

PCB:进程控制块,它是OS中核心的一种数据结构,它存放了OS所有进程的相关信息和描述。OS根据PCB对并发进程进行控制和管理。

定义

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

特征

结构性:进程实体是由程序段、数据段和PCB三部分组成,很多时候说的进程指的是进程实体。
动态行:进程实质是进程实体的一次执行过程。“它由创建而产生,由调度而执行,由撤销而消亡”。
并发性:多个进程实体同驻内存,在一段时间内能同时运行
独立性:它是系统分配资源和调度的基本单位。
异步性:进程实体异步方式运行,进程按各自独立、不可预知速度向前推进。

状态

下图显示了主要的进程的状态及各个状态之间的转换。这里不做过多说明,具体可自行查阅资料。

进程在创建、撤销和切换,系统都会为之付出较大的时空开销,用以分配或回收各种资源、创建或回收PCB以及处理CPU环境状态等。

因此OS中,进程数量不能太多 ,切换也不能太频繁,从而限制了OS的并发性能。特别是多处理机系统发展中,线程能更好的提高程序的并发性,充分发挥了多处理机的优越性。

线程

线程就是在上述条件下,OS引入的概念,有效改善了多处理机系统的性能。
线程也被称作轻型进程,以线程作为调度和分派的基本单位。

进程与线程的区别

  • 调度

引入线程前,进程是系统进行资源分配和调度的一个独立单位。
引入线程后,线程作为系统调度和分派的基本单位,进程作为资源拥有者基本单位。
即,线程基本不拥有资源。同一进程中不同线程切换不会引起进程切换(进程中线程切换到另一进程中线程 会引起进程切换)。

  • 并发

进程间可以并发,同一进程间多个线程也可以并发。

  • 资源

线程基本不拥有资源(也有一点必不可少的资源,线程控制块TCB、用于指示被执行指令序列的程序计数器,保留局部变量、少数状态参数和返回地址 等的一组寄存器和堆栈),但它可以访问所隶属的进程的所有资源,即进程的代码段、数据段以及系统资源(如打开的文件、I/O设备)。

  • 开销

进程的创建、终止和切换都会产生较大时空开销(如前面线程引言所述),而线程只需设置少量寄存器即可,代价远低于进程。

进程和线程区别的简单图表对比

进程(Process) 线程(Thread)
重量级 轻量级
进程间通信较慢(不同内存地址)            同进程中线程间通信较快(共享内存地址)
切换代价大 切换代价低
独立的代码、数据、资源   

同进程中不同线程共享隶属进程的代码、

数据和资源

进程是独立的 线程依赖进程,是进程的子集
资源拥有者基本单位 系统调度和分派的基本单位

线程在进程中的简单示意图

同一进程中多个线程也是并发的。线程共享隶属进程的代码、数据和资源。

1.进程/线程的相关知识点来自于《计算机操作系统》
2.题外:PCB,这里是指进程控制块。
但在手机主板过程中也经常提到的PCB是:(Printed Circuit Board)印制电路板,又称印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件电气连接的载体。它是采用电子印刷术制作的。

3.如有不对或不足,欢迎指正。

--------------------

浅谈进程&线程的更多相关文章

  1. 转载【浅谈ThreadPool 线程池】

    浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

  2. 浅谈Java线程安全

    浅谈Java线程安全 - - 2019-04-25    17:37:28 线程安全 Java中的线程安全 按照线程安全的安全程序由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下五类 ...

  3. 浅谈ThreadPool 线程池(引用)

    出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...

  4. 浅谈linux线程切换问题

    http://www.jb51.net/article/102059.htm 处理器总处于以下状态中的一种: 1.内核态,运行于进程上下文,内核代表进程运行于内核空间 2.内核态,运行于中断上下文,内 ...

  5. 浅谈 Java线程状态转换及控制

    线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...

  6. 浅谈ThreadPool 线程池

    本文来自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有 ...

  7. 浅谈POSIX线程的私有数据

    当线程中的一个函数需要创建私有数据时,该私有数据在对函数的调用之间保持一致,数据能静态地分配在存储器中,当我们采用命名范围也许可以实现它使用在函数或是文件(静态),或是全局(EXTERN).但是当涉及 ...

  8. 浅谈java线程池实现

    再进入主题之前,我们先了解几个概念,对读源码有所帮助,对于线程池的运行状态,有4个级别,分别是RUNNING,SHUTING,STOP,TIDING,TERMINATED 解释如下: The runS ...

  9. 浅谈JAVA线程

    一.线程(Thread) 1.线程 线程:是指程序中的顺序流 多线程:一个程序中的多个顺序流同时执行 (1)线程的状态: 新生 就绪 运行 阻塞 终止 (2)学习多线程: 1)线程的创建 2)线程的状 ...

随机推荐

  1. Codeforce-Ozon Tech Challenge 2020-C. Kuroni and Impossible Calculation(鸽笼原理)

    To become the king of Codeforces, Kuroni has to solve the following problem. He is given n numbers a ...

  2. 如何使用badboy录制一个脚本并成功的导入jmeter中?

    前言: 虽然,很多人已经不适用这种方式进行录制脚本了,因为不好维护.但是,还是有一些朋友在刚开始学习的过程中使用badboy. 可能有人会好奇了,人家五一都出去玩了,你在家学习吗?正巧前一阵有粉丝留言 ...

  3. Python安装第三方模块出错 No module named setuptools

    在安装 zabbix-alerta 第三方模块时候报错 python setup.py install 此时需要安装 setuptools 模块, 这里用自动化脚本安装 wget https://bo ...

  4. 在linux上搭建nacos集群(步骤详细,linux小白也搞得定)

    (1)nacos官网:https://github.com/alibaba/nacos/releases/tag/1.2.1下载nacos安装包到window本地(后缀为tar.zip) (2)在li ...

  5. 如何找到Hive提交的SQL相对应的Yarn程序的applicationId

    最近的工作是利用Hive做数据仓库的ETL转换,大致方式是将ETL转换逻辑写在一个hsql文件中,脚本当中都是简单的SQL语句,不包含判断.循环等存储过程中才有的写法,仅仅支持一些简单的变量替换,比如 ...

  6. 消息队列,RabbitMQ、Kafka、RocketMQ

    目录 1.消息列队概述 1.1消息队列MQ 1.2AMQP和JMS 1.2.1AMQP 1.2.2JMS 1.2.3AMOP 与 JMS 区别 1.3消息队列产品 1.3.1 Kafka 1.3.2 ...

  7. Jmeter-接口测试参数化后循环断言不同内容的方法

    前言 各位小伙伴在做接口自动化有没遇到过这样的问题,CSV文件参数化测试数据后,只能通过人工的的方法去查看结果,不懂写代码去循环断言返回的结果.今天我们来学习一下,不用写代码,就用响应断言,怎么实现循 ...

  8. Pycharm修改HTML模板

  9. 报错:Maven创建An internal error occurred during: "Retrieving archetypes:". Java heap space

    在Eclipse中创建Maven的Web项目时出现错误:An internal error occurred during: "Retrieving archetypes:". J ...

  10. boost在Qt中的使用

    一.说明 理论上,Qt和boost是同等级别的C++库,如果使用Qt,一般不会需要再用boost,但是偶尔也会有特殊情况,比如,第三方库依赖等等.本文主要介绍boost在windows Qt(MinG ...