学习过操作系统(下面简称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. 数据库SQL语言从入门到精通--Part 1--SQL语言概述

    数据库从入门到精通合集(超详细,学习数据库必看) 一.SQL概述 关系数据库标准语言SQL(结构化查询语言). 结构化查询语言(Structured Query Language)简称SQL,是一种特 ...

  2. RF(常用关键字)

    一.常用关键字 Open Browser    [url | browser | alias]    打开浏览器 Close Browser     关闭当前浏览器(不是窗口) Close All B ...

  3. Springboot-WebFlux实现http重定向到https

    1 简介 Spring WebFlux是一个新兴的技术,Spring团队把宝都压在响应式Reactive上了,于是推出了全新的Web实现.本文不讨论响应式编程,而是通过实例讲解Springboot W ...

  4. 细说 PEP 468: Preserving Keyword Argument Order

    细说 PEP 468: Preserving Keyword Argument Order Python 3.6.0 版本对字典做了优化,新的字典速度更快,占用内存更少,非常神奇.从网上找了资料来看, ...

  5. golang server示例

    一个简单的web服务器 package main import ( "fmt" "log" "net/http" ) func main() ...

  6. Spring Cloud Alibaba系列(二)nacos作为服务配置中心

    Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spring Cloud Alibaba Nacos Config,您可 ...

  7. 【Scala】关于集合的各种知识点

    目录 映射Map 不可变Map 概述 操作实例 可变Map 概述 操作实例 Map的遍历 for循环遍历 格式 操作实例 模式匹配遍历 格式 操作实例 Tuple 元祖 概述 定义格式 获取元素方法 ...

  8. Battery Charging Specification Revision 1.2 中文版本

    Battery Charging Specification Revision 1.2 Li,Guanglei 2014.04.03 Rev0.1 转载请注明转自:http://blog.csdn.n ...

  9. python语法学习第六天--集合

    集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...

  10. [hdu4622 Reincarnation]后缀数组

    题意:给一个长度为2000的字符串,10000次询问区间[L,R]内的不同子串的个数 思路:对原串的每个前缀求一边后缀数组,询问[L,R]就变成了询问[L,n]了,即求一个后缀里面出现了多少个不同子串 ...