首页 > 系统相关 >线程和进程区别

线程和进程区别

时间:2023-08-25 22:44:15浏览次数:35  
标签:执行 区别 线程 切换 进程 上下文 CPU

什么是线程和进程?

进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进 程可以有多个线程,比如在 Windows 系统中,一个运行的 xx.exe 就是一个进 程。 线程 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至 少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

进程与线程的区别

线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process), 它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有 若干个线程,至少包含一个线程。

根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执 行的基本单位

资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切 换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销 小。

包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线 (线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻 量级进程。

内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空 间和资源是相互独立的 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个 线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控 制,两者均可并发执行

什么是上下文切换?

多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意 时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略 是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重 新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。

概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存 自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。

任务 从保存到再加载的过程就是一次上下文切换。 上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在 每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换 对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗 最大的操作。 Linux 相比与其他操作系统(包括其他类 Unix 系统)有很多的优点,其中有一 项就是,其上下文切换和模式切换的时间消耗非常少。

 

标签:执行,区别,线程,切换,进程,上下文,CPU
From: https://www.cnblogs.com/szza/p/17658109.html

相关文章

  • 帧、报文和数据包的区别
    概念帧帧(frame):数据链路层的协议数据单元,其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等。在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。以太帧的中部是该......
  • 组播与广播、单播的区别
    什么是组播?作为IP传输三种方式之一,组播指的是报文从一个源发出,被转发到一组特定的接收者,相同的报文在每条链路上最多有一份。相较于传统的单播和广播,组播可以有效地节约网络带宽、降低网络负载,所以被广泛应用于IPTV、实时数据传送和多媒体会议等网络业务中。组播和单播的区别是......
  • 【Java】Mapper # 和$的区别
    #'防止依赖注入'#是将传入的值当做字符串的形式,#防止依赖注入$是将传入的数据直接显示生成sql语句https://blog.csdn.net/hao65103940/article/details/79099159......
  • 传统项目管理VS敏捷项目管理区别及工具
    敏捷项目管理和传统项目管理在多个方面存在区别,包括但不限于以下几点:1、规划方式。传统项目管理更注重预先规划和控制,而敏捷项目管理更注重快速响应和调整。2、变更管理。传统项目管理对变更管理比较严格,需要经过详细的审批和评估,而敏捷项目管理更加灵活,更容易接受变更。3、文档量......
  • 线程协作
    线程协作1.生产者消费者模式应用场景假设仓库中只能存放一件产品﹐生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。如果仓库中没有产品﹐则生产者将产品放入仓库﹐否则停止生产并等待,直到仓库中的产品被消费者取走为止。如果仓库中放有产品﹐则消费者可以将产品......
  • Linux中su命令与sudo命令的区别
    su命令与sudo命令是Linux中比较常用的命令,sudo是以root用户方式执行命令,su是用来变更其他使用者的身份来执行命令。那么Linux中su命令与sudo命令的区别是什么?我们通过这篇文章详细讲解一下。1、关于密码两个命令的最大区别是:sudo命令需要输入当前用户的密码,su命令需要......
  • 模块化、组件化和插件化的区别
    单工程模式移动开发诞生,我们开发移动项目,我相信大多用的是单工程单任务的开发模式,二话不说,直接就开始写起,是不是这样呢?newProject->分包->写起。我相信都经历过,也写的比较爽,为什么呢?这种模式不涉及乱七八糟的处理方式,上手快,开发快,足够敏捷。那么原因是什么呢?MobileProject......
  • 线程池异常处理
    背景:有时候我们把一些业务逻辑丢在线程池处理,本身的业务方法又没有打印日志,导致这个方法执行过程中是否出错了根本不知道,异常信息基本丢失,问题不好排除。方式一简单粗暴trycatch执行的方法@TestpublicvoidtestThreadException(){ThreadPoolExecutorthre......
  • WPF中窗口控件的跨线程调用
    在多线程里面,UI是不能直接跨线程使用的。在WinForm中,我们要跨线程访问窗口控件,只需要设置属性CheckForIllegalCrossThreadCalls=false;即可。在WPF中要设置Dispatcher属性。msg为要输出的内容privatedelegatevoidoutputDelegate(stringmsg);privatev......
  • if if if 判断 和 if elif elif 判断有什么区别
    ififif判断和ifelifelif判断有什么区别在Python中,if语句和if-elif-else语句都用于条件控制,但它们在处理条件和执行逻辑上有一些区别。if语句:if语句用于执行一系列条件之一的代码块。你可以使用多个if语句来检查多个条件,但每个条件都会被逐一检查,即使前面的条件为真,后续......