详解线程与进程的区别

news2024/10/3 23:31:31

文章目录

  • 一、进程(Process)
  • 二、线程(Thread)
  • 三、线程与进程的区别

一、进程(Process)

有关进程的介绍我们在前文已经详细介绍,有疑问的同学可以戳这里->操作系统与进程调度

我们知道,进程的创建、销毁需要经过以下步骤:

  1. 创建 PCB
  2. 资源分配
  3. 把 PCB 加入到内核的双向链表中

事实上,进程是操作系统进行资源分配和调度的一个独立单位,每个进程拥有独立的地址空间(唯一的身份标识pid,内存指针,文件描述表以及辅助属性),因此在进行资源分配的时候成本是非常高的。因此人们急需一种轻型的进程技术来减少开销。在80年代,线程的概念开始出现:

二、线程(Thread)

虽然多进程也能实现 并发编程, 但是线程比进程更轻量,一个进程里面可以包含有很多个线程,同一个进程里面的多个线程之间,共用一份系统资源(内存空间、描述符表),由此新创建的线程,不必重新给他分配系统资源,只需要复用之前的即可!
在这里插入图片描述
这就避免了分配资源导致的高成本问题,除此之外,线程还有以下优点:

  • 创建线程比创建进程更快.
  • 销毁线程比销毁进程更快.
  • 调度线程比调度进程更快.

注意:线程不是越多越好!!!线程的调度本身也是有开销的,而CPU的核心数的固定的就好比,一张只能容纳8个人的桌子,要求把饭吃干净,在人数少于8人时自然是多多益善,而人数达到8个无法容纳时,就人多也无益了,甚至会影响前八个人的效率~

三、线程与进程的区别

通俗来讲,进程=火车,线程=车厢,而线程在进程下行进(单纯的车厢无法运行)一个进程可以包含多个线程(一辆火车可以有多个车厢)不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)但同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)

具体区别如下

  • 本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
  • 包含关系:进程包含线程,一个进程至少有一个线程,所以线程也被称为轻量级进程
  • 资源开销:每个进程有独立的虚拟地址空间以及自己独立的文件描述符表;同一个进程的多个线程之间,则共用这一份虚拟地址空间和文件描述符表,相对来说线程之间的切换开销更小
  • 影响关系:一个进程崩溃后,其他进程不会被影响(隔离性),但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮

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

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

相关文章

Guitar Pro8吉他谱编写软件下载安装及使用教程

音乐制作的许多程序都可以借助软件来完成,吉他谱的编写也是如此。今天要和大家分享的是吉他谱编写软件Guitar Pro,吉他谱怎么做电子版。 提到吉他谱的编写,有一款软件总是被第一时间想到,那就是Guitar Pro。 Guitar Pro是一款专业…

MHA高可用与故障切换

一、MHA的概述 1、 MHA的概念 MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故…

快速幂算法 Pow(x,n)函数的实现_20230515

快速幂算法 Pow(x,n)函数的实现 前言 如果要实现x的整数n次幂(xn),那么可以采用不同的策略,最直观和简单的算法就是利用递归或迭代把n个x连续相乘起来,从而获得幂乘结果。显而易见,此算法至少需要O(n)次运算,n比较大…

大语言模型友好的 API:借助集体智慧构建更好的软件架构

在过去的几个月里,我们一直在探索:如何将大语言模型用于研发效能提升?而随着,我们研究的逐步推进,慢慢进入一些深水区,诸如于:如何将 AI 更好地用于辅助架构设计?基于我们多年的架构…

​目标检测:如何有效实现YOLOv8

本文是一篇实用指南,介绍了如何使用命令行界面和Python来对图像、视频和实时网络摄像头中的物体进行检测。 介绍 目标检测是计算机视觉的一个子领域,主要涉及在图像或视频中以一定的置信度识别和定位物体。识别出的物体通常带有一个边界框,提…

c++ 11标准模板(STL) std::set(三)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…

如何使用chatgpt生成精美PPT提高工作效率

本教程收集于:AIGC从入门到精通教程 如何快速生成精美PPT提高工作效率 一、ChatGPT生成markdown源代码 二、Mindshow登录/注册 三、导入markd

Redis缓存架构详解

文章目录 Redis缓存结构详解前言Redis 缓存架构redis 和db数据一致性先写db还是写redis如果是先写db,再删除缓存呢&#xff1f;延迟双删 简单的缓存,并发不高,没啥流量简单的缓存,并发高,但是存在redis和 Db 双写不一致,读写并发不一致问题解决方案 1解决方案 2解决方案 3读写锁…

Linux常用命令——iconv命令

在线Linux命令查询工具 iconv 转换文件的编码方式 补充说明 iconv命令是用来转换文件的编码方式的&#xff0c;比如它可以将UTF8编码的转换成GB18030的编码&#xff0c;反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,…

《程序员面试金典(第6版)》面试题 16.22. 兰顿蚂蚁(哈希映射,C++)

题目描述 一只蚂蚁坐在由白色和黑色方格构成的无限网格上。开始时&#xff0c;网格全白&#xff0c;蚂蚁面向右侧。每行走一步&#xff0c;蚂蚁执行以下操作。传送门 (1) 如果在白色方格上&#xff0c;则翻转方格的颜色&#xff0c;向右(顺时针)转 90 度&#xff0c;并向前移动…

【Vue2.0源码学习】虚拟DOM篇-Vue中的虚拟DOM

文章目录 1. 前言2. 虚拟DOM简介3. Vue中的虚拟DOM3.1 VNode类3.2 VNode的类型3.2.1 注释节点3.2.2 文本节点3.2.3 克隆节点3.2.4 元素节点3.2.5 组件节点3.2.6 函数式组件节点3.2.7 小结 3.3 VNode的作用 4. 总结 1. 前言 虚拟DOM&#xff0c;这个名词作为当下的前端开发人员…

Android Studio Flamingo (火烈鸟) 升级踩坑记录

由于想要验证Compose最新的debug特性&#xff0c;而我目前使用的版本&#xff08;Dolphin 小海豚&#xff09;不支持&#xff0c;查看官网说明需要最新版本&#xff0c;所以不得已进行了一下Android Studio版本升级&#xff0c;过程中遇到一些问题&#xff0c;本文仅做记录。&a…

FPGA驱动WM8731音频收发全网最细讲解 提供2套工程源码和技术支持

目录 1、前言2、WM8731音频解读3、vivado工程1介绍4、vivado工程2介绍5、上板调试验证6、资料获取 1、前言 本文用FPGA驱动WM8731音频芯片&#xff0c;实现音频相关的应用&#xff0c;适用于在校学生做毕业设计、研究生项目开发&#xff0c;也适用于在职工程师做项目开发&…

Ae 首选项:启动和修复

使用“首选项”里面的启动和修复 Start and Repair面板&#xff0c;可以解决 Ae 中的首选项设置问题&#xff0c;而无需更改、删除或者重新进行设置。 启动选项 Startup Options 启用主屏幕 Enable Home Screen 确定是否在启动 Ae 时显示主屏幕。 更改将在下次启动时有效。 显示…

element-plus 问题

对话框内部下拉框会在左上角 在对话框内打开下拉框后点击关闭按钮&#xff0c;尚未关闭的下拉框会在左上角出现&#xff08;或闪现&#xff09; 解决方案&#xff1a; popper-append-to-body 此方法失效&#xff0c;改用 :teleported"false" teleported&#xff1a;…

JDBC和数据库连接池

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/java-tutorial 】或者公众号【AIShareLab】回复 java 也可获取。 文章目录 JDBC 概述基本介绍模拟JDBCJDBC 带来的好处 JDBC 快速入门JDBC 程序编写步骤JDBC 第一个程序 获取数据库连接5种方式方式1…

接入 GPT-4 的 AI 虚拟女友,一周狂挣 50 万!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 随着 ChatGPT 的爆火&#xff0c;互联网上也衍生出不少令人直呼脑洞大开的 AI 应用。 最近&#xff0c;国外一位名为 Caryn Marjorie 的小姐姐搞了个骚操作&#xff0c;基于 GPT-4 调教出来…

Spring Cloud LoadBalancer是什么?

什么是Spring Cloud LoadBalancer Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代 Ribbon。 Spring官方提供了两种负载均衡的客户端&#xff1a; RestTemplate RestTemplate是Spring提供的用于访问Rest服务的客户端&#xff0c;RestTempla…

30从零开始学Java之详解面向对象的7种创建方式

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家介绍了Java中的类及其特点、创建过程等内容&#xff0c;相信你…

【Nginx高级篇】Lua基础语法和OpenResty的安装

目录 一、前言 二、Lua基础语法 hello world 保留关键字 注释 变量 字符串 空值 布尔类型 作用域 控制语句 if-else for循环 函数 赋值 返回值 Table 数组 遍历 成员函数 三、openresty的安装 &#xff08;一&#xff09;预编译安装 &#xff08;二&…