线程与进程的个人理解

进程(Process):

  1. 一个程序在执行时,操作系统为其分配的资源(如内存、CPU 时间等)构成了一个进程。
  2. 每个进程都有自己的独立的地址空间、堆栈和局部变量,它们之间不共享内存(除非通过特定的机制,比如共享内存或管道等)。
  3. 进程之间是隔离的,一个进程的崩溃通常不会影响到其他进程。

线程(Thread):

  1. 线程是进程中的执行单元,也叫做轻量级进程。一个进程至少有一个主线程(通常是程序启动时自动创建的),它也可以创建多个子线程来执行不同的任务。
  2. 线程之间共享同一个进程的地址空间和资源(如全局变量、打开的文件描述符等),但是每个线程都有自己的栈空间和程序计数器。
  3. 线程的创建和销毁比进程要轻量得多,因为它们共享父进程的资源,不需要独立的内存空间。

主线程(Main thread):

  1. 在程序启动时,操作系统会为程序创建一个主线程,也就是程序的入口点。
  2. 主线程通常负责启动程序的主要逻辑,在大多数程序中,主线程会处理用户输入、程序控制流等。

子线程(Child thread):

  1. 子线程是在程序运行过程中,由主线程或其他线程创建的线程。它们负责执行某些并行任务或辅助任务,以提高程序的效率。
    例如,主线程可能负责UI渲染,而子线程则负责后台计算或处理I/O操作。
  2. 子线程通常在执行完它们的任务后结束,可以通过线程的join()方法或其他同步机制来等待子线程结束,确保程序的正确性。

单核CPU:

  1. 单核CPU一次只能运行一个线程。尽管操作系统支持多线程,但它会使用时间片轮转的方式,在不同线程之间快速切换,让用户感觉到多个线程是同时执行的。实际上,这些线程是按顺序轮流执行的。

多核CPU:

  1. 多核CPU能够同时运行多个线程,每个核心可以运行一个线程。因此,在多核处理器上,如果程序能够有效地利用多个线程(比如多线程计算任务),就能实现更高的并行度和更好的性能。

线程的执行与独立性

  1. 每个线程都有自己的 程序计数器(Program Counter,PC),用于记录当前执行指令的地址,确保线程能按照正确的顺序执行。

  2. 每个线程都有自己的 寄存器 和 堆栈,它们存储的是与该线程执行相关的数据(如局部变量、函数调用信息等)。

  3. 不同的线程可以共享进程中的资源,例如全局变量、打开的文件、内存空间等。

  4. 然而,线程间的共享资源也带来了潜在的竞争问题。当多个线程同时访问同一资源时,如果不加以控制,可能会导致数据竞争(Race Condition)或不一致的状态。因此,线程间常常需要通过 同步机制(如互斥锁、信号量、条件变量等)来保证共享资源的正确访问。

多线程编程中的挑战

  1. 同步与互斥:多个线程访问共享数据时,需要进行同步操作,避免数据竞争和不一致。
  2. 死锁:如果多个线程互相等待对方释放资源,可能会导致程序永远无法继续执行。设计时要避免死锁的发生。
  3. 上下文切换:操作系统在多个线程间进行切换时,会保存和恢复线程的状态。频繁的上下文切换会带来性能损失,因此需要合理设计线程的使用。

如果主线程需要其他功能的辅助时,此时可以创建一个新的线程,这个线程是子线程,而函数里的原本的命令是主线程

也就是说我运行一个程序,系统自动会为其创建一个线程,此为父线程,而程序中创建的所有线程都是隶属于该父线程的子线程

一个代码整体就是一个任务,一个任务就是一个进程。

单核CPU一次只能运行一个线程,多核CPU可以运行多个。一个进程可以包括多个线程,每个线程运行时会有一个程序计数器,记录当前程序执行的位置,多个线程有多个程序计数器,每个线程独立运行。每个线程有自己的寄存器和堆栈,线程间共享地址空间、全局变量、打开的文件等等信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LayaBox1.8.4实现战争迷雾效果

实现思路: 和Unity实现思路一样,可看我写的下面的一篇文章 战争迷雾FogOfWar---Unity中实现-CSDN博客 根据碰撞点可以计算出需要透明的位置,怎样计算如下: 根据迷雾mesh的长宽和纵向横向的的像素数可以得出,每个小方…

linux安装部署mysql资料

安装虚拟机 等待检查完成 选择中文 软件选择 网络和主机名 开始安装 设置root密码 ADH-password 创建用户 等待安装完成 重启 接受许可证 Centos 7 64安装完成 安装mysql开始 Putty连接指定服务器 在 opt目录下新建download目录 将mysql文件传到该目录下 查看linux服务器的…

【计算机系统基础】程序数据与ELF数据节

目录 1. 任务描述 2. 实验阶段 2.1 反汇编获取重定位记录 2.2 分析 2.3 查看节头表,确定偏移量 2.4 使用hexedit工具修改指定内容 1. 任务描述 修改二进制可重定位目标文件“phase1.o”的数据(.data)节内容(不允许修改其他节…

csp-j初赛模拟试题(解析)

题目: 在 C中,以下哪个关键字用于实现多态性? A. virtualB. staticC. externD. const 以下数据结构中,不属于线性结构的是( )。 A. 栈B. 队列C. 二叉树D. 链表 一个有 8 个顶点的无向图,若每个…

OSG开发笔记(三十五):OsgUtil::Optimizer:优化场景策略,提升显示性能和渲染效率

​若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/144092964 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 长沙红胖子Qt…

Axure RP教程:创建高效用户界面和交互

Axure RP是一款广受好评的软件,专门用于设计精致的用户界面和交互体验。这款软件提供了众多UI控件,并根据它们的用途进行了分类。与此同时,国产的即时设计软件作为Axure的替代品,支持在线协作和直接在浏览器中使用,无需…

1 ISP一键下载

BOOT0BOOT1启动模式说明0X用户Flash用户闪存存储器,也就是Flash启动10系统存储器系统存储器启动,串口下载11SRAM启动SRAM启动,用于在SRAM中调试代码 闪存存储器 是STM32 的内置FLASH,一般使用JTAG或者SWD模式下载程序时,就是下载…

【数据结构与算法】链表之美-复杂链表的复制与链表的插入排序

主页:HABUO🍁主页:HABUO 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 1.复杂链表的复制 题目:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中…

统计字符串中单词出现的次数

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <map> #include <string> int main() {std::string s;//std::cin >> s;s " aaa aaaaa a aa aaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaa Hi I am a person a…

comfyui使用记录-PuLID_Flux模型使用

文章目录 1.PuLID模型简介&#xff1a;2.PuLID_Flux 工作流的部署流程安装pulid节点 3.部署遇到的一些问题加载这个节点错误&#xff1a;PulidFluxInsightFaceLoaderPulidFluxEvaClipLoader加载错误 4.PuLID模型的出图效果5.一些参数的设置用到的提示词 1.PuLID模型简介&#x…

threeJs学习 贴图 :地球

效果图&#xff1a; 贴图以后的效果&#xff1a; vue代码&#xff1a; <template><div class"scene_box"><p>创建纹理贴图TextureLoader</p><div class"canvas"></div></div> </template><script s…

联想品牌的电脑 Bios 快捷键是什么?如何进入 Bios 设置?

在某些情况下&#xff0c;您可能需要通过U盘来安装操作系统或进行系统修复。对于联想电脑用户来说&#xff0c;了解如何设置U盘作为启动设备是非常有用的技能之一。本文简鹿办公将指导您如何使用联想电脑的 U 盘启动快捷键来实现这一目标。 联想笔记本 对于大多数联想笔记本电…

SmartSQL:一款方便、快捷的数据库文档查询、导出工具

&#x1f6a9; 项目介绍 SmartSQL 是一款方便、快捷的数据库文档查询、导出工具&#xff01;从最初仅支持SqlServer数据库、CHM文档格式开始&#xff0c;通过不断地探索开发、集思广益和不断改进&#xff0c;又陆续支持Word、Excel、PDF、Html、Xml、Json、MarkDown等文档格式…

Transformer?Attention?——Are All You Need!

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要较为深入地讲述 transformer 模型及 attention 机制等相关深度学习的知识&#xff0c;主要介绍模型结构、原理等。Transformer 属于是当下比较流行和创新的深度学习的基础模型架构&#xff0c;主要应用于自然语言处理&a…

24.11.28 Cookie

cookie_webstorage 1.cookie 每次请求时 可以把cookie自定义的数据 传给服务端 (请求参数 请求头之外 报文传自定义数据的位置 cookie可以长期保存) cookie特点 1.数据格式只有字符串 2.按键值对存储 3.对中文支持较差(尽量不要用中文) 4.按照网站(域 domain)存储 5.可…

尚硅谷前端 (wsy答辩)

尚硅谷前端 &#xff08;wsy答辩&#xff09; 文章目录 尚硅谷前端 &#xff08;wsy答辩&#xff09;一、前端开发过程和框架1.框架目录结构认识1.程序的入口 有两个 第一个是index,html , 第二个在SRC目录下的main,js2.前端页面环境使用框架&#xff08;模板&#xff09;3、框…

不间断电源 (UPS) 对现代技术可靠性的影响

在这个技术型世界里&#xff0c;无论是在个人还是商业环境中&#xff0c;电力供应商提供的稳定供电都变得越来越重要。 不间断电源 (UPS) 系统是一种不可或缺的解决方案&#xff0c;可保证终端设备不受干扰地运行&#xff0c;在出现电源问题或故障时让用户继续工作。 这篇文章…

【05】Selenium+Python 两种文件上传方式(AutoIt)

上传文件的两种方式 一、input标签上传文件 可以用send_keys方法直接上传文件 示例代码 input标签上传文件import time from selenium import webdriver from chromedriver_py import binary_path # this will get you the path variable from selenium.webdriver.common.by i…

leetcode 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3…

MATLAB - ROS2 ros2genmsg 生成自定义消息(msg/srv...)

系列文章目录 前言 语法 ros2genmsg(folderpath)ros2genmsg(folderpath,NameValue) 一、说明 ros2genmsg(folderpath) 通过读取指定文件夹路径下的 ROS 2 自定义信息和服务定义来生成 ROS 2 自定义信息。函数文件夹必须包含一个或多个 ROS 2 软件包。这些软件包包含 .msg 文件…