进程和线程的区别

news2024/10/5 13:13:31

进程和线程的区别

文章目录

  • 进程和线程的区别
    • 进程和线程的概念
  • 一、从属关系不同
  • 二、所属基本单位不同
  • 三、资源消耗不同
  • 四、是否同步和互斥
    • 额外补充问题:一个进程是不是可以创建无限数量的线程?
    • 参考链接


进程和线程的概念

在了解区别之前,我们先了解什么是进程和线程:

  • 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
  • 线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

以下就开始介绍两者区别

一、从属关系不同

进程是正在运行程序的实例,进程中包含了线程,而线程是轻量级的进程,一个进程中包含了多个线程,因此多个线程间可以共享进程资源,线程和进程的关系如下图所示:
在这里插入图片描述
其中,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。

  1. 程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。
  2. 栈是用来记录每个线程自己的局部变量的。
  3. 堆中存放的是当前程序创建的所有对象。
  4. 方法区存放的是常量和静态变量等信息。

二、所属基本单位不同

进程是资源分配的最小单位,线程是程序执行的最小单位。
同一个进程可以包含多个线程,一个进程中至少包含一个线程,一个线程只能存在于一个进程中
以下节选自《Unix网络编程》

fork is expensive. Memory is copied from the parent to the child, all
descriptors are duplicated in the child, and so on. Current
implementations use a technique called copy-on-write, which avoids a
copy of the parent’s data space to the child until the child needs its
own copy. But, regardless of this optimization, fork is expensive.

IPC is required to pass information between the parent and child after
the fork. Passing information from the parent to the child before the
fork is easy, since the child starts with a copy of the parent’s data
space and with a copy of all the parent’s descriptors. But, returning
information from the child to the parent takes more work.

Threads help with both problems. Threads are sometimes called
lightweight processes since a thread is “lighter weight” than a
process. That is, thread creation can be 10–100 times faster than
process creation.

All threads within a process share the same global memory. This makes
the sharing of information easy between the threads, but along with
this simplicity comes the problem

三、资源消耗不同

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建及销毁一个线程的开销也比进程要小很多。

四、是否同步和互斥

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC) 进行。并且线程在执行时是同步和互斥的,毕竟他们共享同一个进程下的资源,所以如何处理好同步与互斥是编写多线程程序的难点。

额外补充问题:一个进程是不是可以创建无限数量的线程?

不是。

操作系统给一个系统进程提供的空间是2GB ,而一个线程堆栈的空间默认在启动的时候是1MB,理论上最大线程数=2GB/1MB=2048。但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。

如果是同一台机器内的话,能起多少线程也是受内存限制的。

参考链接

链接: 一道面试题:说说进程和线程的区别
链接: 进程与线程的一个简单解释
链接: 进程和线程有什么区别
链接: 线程进程区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】IO流 - 字节流

文章目录FileInputStream 介绍FileOutputStream介绍文件输入输出综合使用【拷贝】FileInputStream 介绍 创建一个txt文件,写入 HelloWorld 并用Java读取: Test public void readFile01(){//提前创建一个文件hello.txt并编辑一个HelloWorldString filePa…

Nacos 注册中心的常用配置

1.服务端地址 spring.cloud.nacos.discovery.server-addr 无 Nacos Server 启动监听的 ip 地址和端口2.服务名 spring.cloud.nacos.discovery.s ervice ${spring.application.name} 给当前的服务命名3.服务分组spring.cloud.nacos.discovery.groupDEFAULT_GROUP 设置服务所处的…

机器视觉之ros人脸识别

系列文章目录 机器视觉之ros人脸识别 ros人脸识别系列文章目录一、WIN下的环境设置二、连接摄像头设备到虚拟机三、安装摄像头驱动设备3.1判断安装usb还是uvc驱动包3.2查看摄像头设备3.3测试网络摄像头3.4安装摄像头驱动包四、调用视觉功能包五、人脸识别的调用一、WIN下的环境…

封装系统之新手操作版

一、需要软件:Vmware16,win10正版系统,EasySysprep5,EasyU_v3.6.iso 下载地址:EasySysprep5:https://www.itsk.com/thread-425990-1-1.html EasyU_v3.6:https://www.itsk.com/thread-426856-1-1…

【计算机视觉】不来试试图片轮廓提取?

文章目录🚩 前言🍈 边缘提取原理卷积用特殊的卷积核进行轮廓提取🍏 开始轮廓提取代码🚩 前言 最近学到了深度学习的卷积操作,在卷积神经网络出现之前,就已经有使用卷积核 (也叫滤波器&#xff…

NLP模型(三)——FastText介绍

文章目录1. FastText 概述2. FastText 分类模型2.1 结构2.2 n-gram3. FastText 词嵌入模型1. FastText 概述 首先,我们得搞清楚,FastText 是什么?有的地方说是分类模型,有的地方又将其用于词向量,那么,Fas…

ppt复现CVPR顶会流程图

本次目标如下图,难点在于立方体和矩阵格网的绘制 文末附机器学习绘图模板~ 先来绘制立方体,插入——形状——立方体,调节成如下图,再点击水平翻转: 绘制矩形,多绘制几个组合成矩形格网,右键设置…

TFT-LCD屏幕读取Flash芯片图片资源并显示

TFT-LCD屏幕读取Flash芯片图片资源并显示 在前面用TFT-LCD显示图片的实验中,由于图片资源过大,240 * 320 的图片大小为150K,而STM32F103ZET6的内部Flash才512K,最多能放三张图片,所以这次将图片放到外部Flash中&#…

【Java八股文总结】之Redis数据库

文章目录Redis 数据库一、Redis基础1、Redis应用场景2、Redis数据类型3、Redis常用命令4、Redis为什么速度快?5、Redis和Memcached的区别和共同点6、Redis和MySQL的区别?二、高可用1、主从复制Q:主从复制主要的作用?2、Redis主从复制原理Red…

Cadence之Allegro:蛇形与差分等长

文章目录 一、三种等长方法二、直接等长法设置教程1、差分设置2、analysis设置三、pin-pair法设置教程一、三种等长方法 直接等长法 适用pin和pin之间没有容抗和阻抗的情况,即pin和pin之间只有一根线、没有电阻和电容的时候才可以使用这种方法。 pin-pair法 建立Sigxplorer模形…

基于stm32的光照强度检测智能窗帘系统

资料编号:098 下面是相关功能视频演示: 98-基于stm32的光照强度检测智能窗帘系统Proteus仿真(源码仿真全套资料)功能介绍: 检测当前的光照强度,LCD1602显示,并且可以自动打开关闭窗帘&#xf…

Tomcat AJP 文件包含漏洞(CVE-2020-1938)

目录 1.漏洞简介 2、AJP13 协议介绍 Tomcat 主要有两大功能: 3.Tomcat 远程文件包含漏洞分析 4.漏洞复现 5、漏洞分析 6.RCE 实现的原理 1.漏洞简介 2020 年 2 月 20 日,公开CNVD 的漏洞公…

【ACL 2022】用于多标签文本分类的对比学习增强最近邻机制

论文地址:https://aclanthology.org/2022.acl-short.75.pdf 1. 摘要 多标签文本分类(MLTC)是自然语言处理中的一项基本且具有挑战性的任务。以往的研究主要集中在学习文本表示和建模标签相关性上。然而,在预测特定文本的标签时&…

玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!

sql语句group by使用详解group by的基本语法基本语法什么是分组查询(一个字段)多个字段的分组查询1.两个字段的分组查询2.三个字段及N个字段进行分组查询having子句的使用基本语法having是干什么的演示分组查询select关键字后面列名书写的注意事项group by的基本语法 基本语法…

入门必写项目之图书管理系统(分析详解+完美运行+代码可拿)

文章目录一、需求分析二、思路分析三、包分类四、模块代码展示1.1书籍类(Book)实现1.2书架类(BookList类)实现2.1功能接口(IOperation)实现2.2增加图书(Addoperation)实现2.3删除图书…

家庭实验室系列文章-电脑如何配置网络唤醒 (WOL)?

前言 其实这个专题很久很久之前就想写了,但是一直因为各种原因拖着没动笔。 因为没有资格,也没有钱在一线城市买房 (😂😂😂); 但是在要结婚之前,婚房又是刚需。 我和太太最终一起在一线城市周边的某二线城…

Pyspark学习笔记小总

pyspark官方文档: https://spark.apache.org/docs/latest/api/python/index.html pyspark案例教程: https://sparkbyexamples.com/pyspark-tutorial/ 1. 写在前面 这篇文章记录下最近学习的有关Pyspark以及用spark sql去处理大规模数据的一些常用语法,之前总觉得p…

中小企业办公自动化系统设计与实现(SSH)

目 录 摘 要 I ABSTRACT II 目 录 IV 第1章 绪论 1 1.1 课题背景 1 1.1.1 办公自动化概述 1 1.1.2 中小企业办公模式的现状 2 1.2 研究意义 3 1.3 设计技术及开发环境 5 1.3.1 设计技术 5 1.3.2 开发环境 7 第2章 可行性分析 9 2.1 组织和管理可行性 9 2.2 经济可行性 9 2.3 技…

动态规划模板总结(1)

动态规划思想(1) 背包问题 ​ 分类: 01 背包问题 ​ 含义:每个物体最多选1次,在不超过总体积的情况下价值最大图解: f(i,j)表示的是集合的某种属性,是个值。 集合是所有选法 i 只从前i个中选 朴素实现 #include&…

ElasticSearch是什么?ElasticSearch在SpringBoot中怎么用?SpringBoot整合ElasticSearch

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4.3.4 ElasticSearch(ES) 3.4.3.4.1 介绍 是一个…