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

进程和线程的区别

时间:2022-10-18 19:44:31浏览次数:64  
标签:开销 操作系统 区别 线程 切换 进程 CPU

进程

概念

进程是操作系统资源分配的最小单元。一个进程拥有的资源有⾃⼰的堆、栈、虚存空间(页表)、文件描述符等信息。 从编程的角度来理解进程,可以把它看作是⼀个类或一个 PCB(Process Control Block,进程控制块的结构体)。

进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看作程序运行的一次运行过程。

特点

  • 进程是程序的一次执行过程。若程序执行两次甚至多次,则需要两个甚至多个进程。

  • 进程是是正在运行程序的抽象。它代表运行的CPU,也称进程是对CPU的抽象。(虚拟技术的支持,将一个CPU变幻为多个虚拟的CPU)

  • 系统资源(如内存、文件)以进程为单位分配。

  • 操作系统为每个进程分配了独立的地址空间

  • 操作系统通过“调度”把控制权交给进程。

 

 

问题:为什么引入线程?

首先我们引入了进程这个概念,虽然进程有利于资源的管理和保护。然而在实际应用中,进程有这样的问题:

  1. 进程切换的代价、开销比较大;

  2. 在一个进程内也需要并行执行多个程序,实现不同的功能。

  3. 进程有时候性能比较低。

     

引入线程有以下三个方面的考虑

  1. 应用的需要。比如打开一个浏览器,我想一边浏览网页,一边下载文件,一边播放音乐。如果一个浏览器是一个进程,那么这样的需求需要线程机制。

  2. 开销的考虑。在进程内创建、终止线程比创建、终止进程要快。同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。线程之间相互通信无须通过内核(同一进程内的线程共享内存和文件)

  3. 性能的考虑。多个线程中,任务功能不同(有的负责计算,有的负责I/O),如果有多个处理器,一个进程就可以有很多的任务同时在执行。

 

 

线程

概念

线程是操作系统能够进行运算调度的最小单元。它被包含在进程中,是进程中实际运行的单位。一个进程中可以并发多个线程,每个线程执行不同的任务 。

虽然多进程也能实现并发编程,但是线程比进程更轻量

优势

  • 创建线程比创建进程更快

  • 销毁线程比销毁进程更快

  • 调度线程比调度进程更快

 

 

进程与线程的区别

  1. 根本区别:进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元。

  2. 从属关系不同:进程中包含了线程,线程属于进程。

  3. 开销不同:进程的创建、销毁和切换的开销都远大于线程。

  4. 拥有资源不同:每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源。

  5. 控制和影响能力不同:子进程无法影响父进程,而子线程可以影响父线程,如果主线程发生异常会影响其所在进程和子线程。

  6. CPU利用率不同:进程的CPU利用率较低,因为上下文切换开销较大,而线程的CPU的利用率较高,上下文的切换速度快。

  7. 操纵者不同:进程的操纵者一般是操作系统,线程的操纵者一般是编程人员。

 

 

转载至

https://blog.csdn.net/qq_42437577/article/details/100766768

https://blog.csdn.net/weixin_48271092/article/details/123649795

标签:开销,操作系统,区别,线程,切换,进程,CPU
From: https://www.cnblogs.com/galo/p/16803826.html

相关文章

  • Linux中僵尸进程是什么意思?怎么查看僵尸进程?
    进程就是系统运行中的程序。是正在执行的一个程序或者命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。说起进程,那么你知道Linux中僵尸进程......
  • 进程与线程的区别
    进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独......
  • 产品和项目的区别
    一、产品与项目的区别1、定位不同产品是需求方,决定做什么。项目是执行方,解决的是如何做的问题。2、使用者不同产品由产品经理使用和管理,记录需求,规划产品的开发计划。项目......
  • 队列queue的poll()和remove()的区别
    队列是一个典型的先进先出(FIFO)的容器。即从容器的一端放入事物,从另一端取出,并且事物放入容器的顺序与取出的顺序是相同的。在Queue中poll()和remove()有什么区别相......
  • 常用的多线程类
    常用的多线程类创建池ExecutorServiceexecutor=Executors.newFixedThreadPool(4);Executors工程类,可以提交任务。executor.submit(Callabletask)记得关闭池shut......
  • vue-router中query和params的区别
    一.query和params的知识点理解/data/:id这个路由匹配/data/1,/data/2这里的id叫params/data?id=1/data?id=2这里的id叫queryparams方法传参时,要在路由后面加......
  • Java8Stream的flatmap应用(区别map)-优化嵌套for循环条件筛选
    场景Java8新特性-Stream对集合进行操作的常用API:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126070657前面讲Stream的常用api中讲到map的使用......
  • AOP之环绕通知 proceedingjoinpoint和前置后置通知 joinpoint区别
    AOP之proceedingjoinpoint和joinpoint区别AOP之proceedingjoinpoint和joinpoint区别现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制。基础知识......
  • 测试-SIT测试和UAT测试的区别在哪里?
    在企业级软件的测试过程中,经常会划分为三个阶段——单元测试,SIT和UAT,如果开发人员足够,通常还会在SIT之前引入代码审查机制(CodeReview)来保证软件符合客户需求且流程正确......
  • 【Java】多线程详解!
    多线程程序程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程进程(process)是程序的一次执行过程,或是正在运行的一个......