学习过操作系统(下面简称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. Springboot-WebFlux实现http重定向到https

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

  2. Python爬虫(三)爬淘宝MM图片

    直接上代码: # python2 # -*- coding: utf-8 -*- import urllib2 import re import string import os import shu ...

  3. Go中的数组切片的使用总结

    代码示例 package main import "fmt" func main(){ fmt.Println("Hello, world") // 定义数组的 ...

  4. GoF23:单例模式(singleton)

    目录 单例模式简介 常见五种单例模式的实现方式 饿汉式 懒汉式 DCL懒汉式 饿汉式改进(静态内部类式) 枚举单例 防止反射破坏单例模式 单例模式简介 核心作用:保证一个类只有一个实例,并且提供一个访 ...

  5. mac下xampp使用phpmyadmin搭建后台

    情景 使用xampp搭建一个后端环境,前提已经有后端和数据库配置文件 安装和启动xampp 安装xampp没什么可说的,在https://www.apachefriends.org/index.htm ...

  6. Synchronized 和 ReentrantLock (Lock )的区别

    原始构成 Synchronized 是关键字,属于JVM层面,底层是通过 monitorenter 和 monitorexit 完成,依赖于 monitor 对象来完成.由于 wait/notify ...

  7. 软路由OpenWrt(LEDE)2020.4.6编译 UnPnP+NAS+多拨+网盘+DNS优化

    近期更新:2020.04.06编译-基于OpenWrt R2020.3.19版本,源码截止2020.04.06.   2020.04.06更新记录: 以软件包形式提供ServerChan(微信推送) ...

  8. 【2020Java最新学习路线】写了很久,这是一份最适合普通大众、科班、非科班的路线

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  9. 单向环形链表解决约瑟夫环(Josephus)问题

    一.约瑟夫环问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那 ...

  10. FAXCOM和FXSCOMEX 传真编程

    需要引用的dl,如下信息,早起使用的是FXSCOM.DLL,现在微软提供了相应的扩展,其程序集为,FXSCOMEX.dll FXSCOMEX.dll 提供跟加健全的方法,可以说所有关于传真的操作都在这 ...