一、进程和线程的定义

1.进程

我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用,程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志。

进程具有的特征:

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
  • 并发性:任何进程都可以同其他进行一起并发执行;
  • 独立性:进程是系统进行资源分配和调度的一个独立单位;
  • 结构性:进程由程序,数据和进程控制块三部分组成

2.线程

在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。

  后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程序的要求了。于是就发明了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。

二、进程与线程的区别

  1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
  2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
  3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
  4. 调度和切换:线程上下文切换比进程上下文切换要快得多

总之,线程和进程都是一种抽象的概念,线程是一种比进程还小的抽象,线程和进程都可用于实现并发。

在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位,它相当于一个进程里只有一个线程,进程本身就是线程。所以线程有时被称为轻量级进程。

后来,随着计算机的发展,对多个任务之间上下文切换的效率要求越来越高,就抽象出一个更小的概念-线程,一般一个进程会有多个(也可以是一个)线程。线程的出现,使得一个进程可以有多个线程

线程的存在离不开进程。进程如果消失线程一定会消失,反之如果线程消失,进程不一定会消失。

三、并发的概念

大部分操作系统的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态,等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。

四、多线程与多核

上面提到的时间片轮转的调度方式说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。很多操作系统的书都说“同一时间点只有一个任务在执行”。那有人可能就要问双核处理器呢?难道两个核不是同时运行吗?

其实“同一时间点只有一个任务在执行”这句话是不准确的,至少它是不全面的。那多核处理器的情况下,线程是怎样执行呢?这就需要了解内核线程。

多核(心)处理器是指在一个处理器上集成多个运算核心从而提高计算能力,也就是有多个真正并行计算的处理核心,每一个处理核心对应一个内核线程。内核线程(Kernel Thread,KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。一般一个处理核心对应一个内核线程,比如单核处理器对应一个内核线程,双核处理器对应两个内核线程,四核处理器对应四个内核线程。

现在的电脑一般是双核四线程、四核八线程,是采用超线程技术将一个物理处理核心模拟成两个逻辑处理核心,对应两个内核线程,所以在操作系统中看到的CPU数量是实际物理CPU数量的两倍,如你的电脑是双核四线程,打开“任务管理器\性能”可以看到4个CPU的监视器,四核八线程可以看到8个CPU的监视器。

超线程技术就是利用特殊的硬件指令,把一个物理芯片模拟成两个逻辑处理核心,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。这种超线程技术(如双核四线程)由处理器硬件的决定,同时也需要操作系统的支持才能在计算机中表现出来。

五、为何不使用多进程而是使用多线程?

线程廉价,线程启动比较快,退出比较快,对系统资源的冲击也比较小。而且线程彼此分享了大部分核心对象(File Handle)的拥有权。

如果使用多重进程,但是不可预期,且测试困难。

六、面试题

进程和线程的区别与联系
【区别】:

  1. 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位;
  2. 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行;
  3. 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。进程所维护的是程序所包含的资源(静态资源), 如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等;线程所维护的运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集等;
  4. 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个进程死掉就等于所有的线程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

【联系】:

  1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源;
  3. 处理机分给线程,即真正在处理机上运行的是线程;
  4. 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

我的微信公众号:架构真经(关注领取免费资源)

参考文章

  1. https://www.cnblogs.com/qianqiannian/p/7010909.html
  2. https://www.jianshu.com/p/def5bf41fdee
  3. https://www.liaoxuefeng.com

操作系统(1)-进程与线程相关推荐

  1. 操作系统(二): 进程与线程

    操作系统(二): 进程与线程 本章解读 进程管理是操作系统重点中的重点,涵盖了操作系统中大部分的知识和考点.其主要包括四部分:进程与线程,处理器调度,同步与互斥,死锁.所以我准备分四个部分来解释这四个 ...

  2. 操作系统 | 关于进程、线程、用户线程、内核线程

    操作系统 | 关于进程.线程.用户线程.内核线程 一.进程和线程 进程:操作系统分配资源的最小单位 线程:CPU调度的最小单位 每个线程共享进程的代码段 每个线程共享进程的数据段 每个线程共享进程的堆 ...

  3. 【操作系统】进程 与 线程 详解(以及二者的比较)

    目录 1.CPU基本组成原理 2. 进程(process) 1.1 操作系统管理进程的方式 1.2 PCB中的属性 1.3 实现进程调度相关属性 1.3.1 状态 1.3.2 优先级 1.3.3 记账 ...

  4. Linux 操作系统原理 — 进程与线程管理

    目录 文章目录 目录 前言 进程与线程 内核线程,用户线程与轻量级进程 内核线程 轻量级进程 用户线程 轻量级进程与用户线程的区别 用户线程与轻量级进程的混合模式 用户线程和内核线程的区别 线程的实现 ...

  5. 关于操作系统中进程、线程、死锁、同步、进程间通信(IPC)的超详细详解整理

    ​​​​​​​作者主页:https://www.zhihu.com/people/san-hao-bai-du-ren-79 一.什么是进程?什么是线程? 1.1 进程定义 1.2 线程定义 1.3 ...

  6. 操作系统之进程和线程

    操作系统也是软件,区别于应用软件的最大特点具有进程管理.内存管理等功能. 一 进程 1.1 什么是进程(process) 进程指的就是正在运行中的程序.进程也是有生命周期,当程序运行结束,则进程结束. ...

  7. 操作系统:进程和线程所有知识点

    01 什么是进程? 标准定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程.进程是一个正在执行程序的实例,包括程序计数器.寄存器和程序变量的当前值. 简单来说进程就是一个程序的执 ...

  8. 【操作系统】进程、线程、协程和并发、并行

    文章目录 一.并发介绍 1. 进程和线程 (1)进程 (2)线程 (3)进程与线程的区别 (4)任务调度 (5)何时使用多进程,何时使用多线程? 2. 线程和协程 (1)协程 (2)协程和线程的区别 ...

  9. 操作系统 (二): 进程与线程

    本文为<现代操作系统>的读书笔记 目录 进程 (process) 多道程序设计模型 程序顺序执行与并发执行 前驱图和程序执行 并发执行 进程模型 进程控制 创建进程 进程是何时被创建的? ...

  10. 操作系统:进程和线程

    进程与线程 一.进程的概念 1.1 进程的定义 程序:就是一个指令序列 早期的计算机只支持单道程序:同一时间内只允许一个程序执行 程序的代码存放在程序段内,程序运行过程处理的数据放在数据段内(如变量) ...

最新文章

  1. 神经网络与机器学习 笔记—多层感知器(MLP)
  2. PHP新手上路(十二)
  3. 2.6 动量梯度下降法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. Python 3 的 int 类型详解(为什么 int 不存在溢出问题?)
  5. Android 8.0 运行时权限策略变化和适配方案
  6. C++读取与保持图片
  7. 纤程 java_JAVA协程 纤程 与Quasar 框架
  8. nginx绑定IP的坑
  9. linux入门怎么学?
  10. r语言 生成等差序列_使用序列模型生成自然语言
  11. Android FFmpeg视频添加水印
  12. 自考《数据库系统原理》(3)之关系模式设计理论
  13. ubuntu QT Creator Fatal IO error 2 (没有那个文件或目录) on X server :0
  14. 如何知道PDF是不是正常的A4大小尺寸?
  15. light-bot小游戏
  16. Android实现朋友圈的评论和回复
  17. idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理
  18. 五笔中三个字的词组打法
  19. java程序员昵称_Java程序员需要掌握的几个代码命名
  20. Java入门-核心机制

热门文章

  1. Extjs DateField onchange
  2. 可作为GC Roots的对象
  3. Zookeeper Watcher(事件监听器)?
  4. Mellanox CX-5网卡支持OVS流表加速功能的调研
  5. Thanos 简介和实践
  6. leetcode76. 最小覆盖子串
  7. 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
  8. 小白如何写Python算法-计算模型稳定性评估指标PSI
  9. 以ssm+mvc框架来开发一个系统的基本流程
  10. Eureka获取注册信息