学习过操作系统(下面简称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. 数学--数论--HDU 6128 Inverse of sum (公式推导论)

    Description 给nn个小于pp的非负整数a1,-,na1,-,n,问有多少对(i,j)(1≤i<j≤n)(i,j)(1≤i<j≤n)模pp在意义下满足1ai+aj≡1ai+1aj ...

  2. C++ 模板(template) 的定义

    定义: 模板(template)是实现代码重用机制的一种工具,它可以实现类型参数化,把类型定义为参数(模板元编程),从而实现了真正的代码可重用性. 模板是用来批量生成功能和形式都几乎相同的代码的.编译 ...

  3. 我在 IntelliJ IDEA 中必有得插件和配置

    最近在陆续写 Java 并发编程系列,好多朋私信问我的不是并发内容本身,而是我的 IDEA 主题配置.我就姑且认为好的主题配置可以写出更好的并发程序吧 即便这种可能性只有万分之一,我也要把我的 IDE ...

  4. mssql手工盲注

    遇到中文的列名 利用unicode 进行单字节的转换 declare @s varchar(50);set @s = N'拉';select UniCode(@s),nchar(UniCode(@s) ...

  5. GIL-Guilds(黑白灰染色)

    传送门门门门门咩咩咩咩咩咩咩咩咩咩咩咩 \(这题真是扯谈!!!\) \(灰色很高级是吧,但是题目没要你把颜色全部用上去啊!!!\) \(黑色或者白色只有一个条件,但灰色需要和所有三种颜色都相邻.这么难 ...

  6. CSS的基本语法及页面引用

    CSS的基本语法及页面引用 CSS基本语法 CSS的定义方法是: 选择器 { 属性:值; 属性:值; 属性:值;} 选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性每个属性有一个或多个 ...

  7. Excel 函数 常见错误

    excel公式出错的值. 常见错误值类型: #N/A #VALUE! #NAME? #REF! #NUM! #NULL! #N/A 找不到指定内容,比如查找根本不存在的内容,便显示该错误值 比如在使用 ...

  8. 万盛酒店餐饮管理系统(SpringBoot,SSM,MySQL )

    项目源码获取地址: 链接:https://pan.baidu.com/s/1ip0keQruE2crA8vm1n8ZXQ 提取码:kivb 复制这段内容后打开百度网盘手机App,操作更方便哦 [功能包 ...

  9. Coursera课程笔记----计算导论与C语言基础----Week 2

    计算机的历史与未来(Week 2) 计算机历史 早期计算机:手工计算器➡️机械计算器➡️计算机原型 现代计算机:电子管计算机➡️晶体管计算机➡️集成电路计算机➡️超大规模集成电路 早期的手工计算辅助工 ...

  10. stanfordcorenlp安装教程&问题汇总(importerror-no-module-named-psutil、OSError: stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists.)&简单使用教程

    stanfordcorenlp安装教程&简单使用教程 编译环境:python 3.6 .win10 64位.jdk1.8及以上 1.stanfordcorenlp安装依赖环境 下载安装JDK ...