C++ 并发编程 | 进程与线程
一、进程与线程
1、进程
1.1、定义
操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位。进程是一种抽象的概念,一般由程序、数据集合和进程控制块三部分组成,如下:
- 程序用于描述进程要完成的功能,是控制进程执行的指令集
- 数据集合是程序在执行时所需要的数据和工作区
- 程序控制块,包含进程的描述信息和控制信息,是进程存在的唯一标志
1.2、进程间通信方式
据进程通信时信息量大小的不同,可以将进程通信划分为两大类型,如下:
- 低级通信: 控制信息的通信(主要用于进程之间的同步,互斥等控制信息的传递)
- 高级通信: 大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等)
进程间的通信方式,有下面几种:
- 管道通信:管道通常指无名管道,是一种半双工的通信方式,数据只能单向流动。当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开
- 消息队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列,存放在内核中并由消息队列标识符(即队列ID)标识
- 共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问
- 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问
2、线程
2.1、定义
线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。
2.2、线程间通信方式
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制,下面是常用的线程通信机制,如下:
- 锁机制:通过锁实现线程同步
- 信号量机制:线程的信号和进程的信号量类似,使用线程的信号量可以高效地完成基于线程的资源计数
2.3、线程同步
实现线程同步的方式有很多种,最常见的就是使用锁机制实现线程同步,线程同步的最终目标是实现对共享资源的安全访问。
3、进程与线程的区别
进程是资源分配的最小单位,线程是CPU调度的最小单位,进程与线程的区别,如下:
| 进程 | 线程 | |
|---|---|---|
| 概念 | 进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位 | 线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行 |
| 内存分配 | 系统在运行的时候会为每个进程分配不同的内存空间 | 系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享进程资源 |
| 切换开销 | 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销 | 线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小 |
| 包含关系 | 一个进程可以包含多个线程 | 轻量级进程 |
相关文章:
C++ 并发编程 | 进程与线程
一、进程与线程 1、进程 1.1、定义 操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位。进程是一种抽象的概念,一般由程序、数据集合和进程控制块三部分组成,如下&#x…...
基于Python实现身份证信息识别
目录 前言身份证信息识别的背景与意义自动识别身份证的需求实现环境与工具准备Python编程语言OpenCV图像处理库Tesseract OCR引擎身份证信息识别算法原理图像预处理步骤(图像裁剪、灰度化 、二值化、去噪)信息提取与解析Python代码实现通过OCR提取身份证号码代码解析身份证信息…...
深度学习记录--正则化(regularization)
什么是正则化? 正则化(regularization)是一种实用的减少方差(variance)的方法,也即避免过度拟合 几种正则化的方法 L2正则化 又被称为权重衰减(weight dacay) 在成本函数中加上正则项: 其中 由于在w的更新过程中会递减,即权…...
Java的便捷输入方法及解析
在 Java 中,有多种便捷的输入方法可以从用户那里获取输入。下面是一些常见的便捷输入方法及解析: 使用 Scanner 类:在上述示例中,首先导入了 java.util.Scanner 类,创建了一个 Scanner 对象,并使用 System…...
抖音矩阵云混剪系统源码(免授权版)多平台多账号一站式管理,附带系统搭建教程
搭建教程 MySQL 5.6 PHP 7.2 Apache 数据库名称 juzhen Nginx环境切换伪静态 1、解压安装包到项目根目录,找到application/database.php 更换自己的数据库密码 2、阿里云现有的配置不要动 其他按照文档进行添加 3、项目访问目录:public 4、域名…...
【Linux】权限的深度解析
前言:在此之前我们学习了一些常用的Linux指令,今天我们进一步学习Linux下权限的一些概念 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:Linux的学习 👈 💯代码仓库:卫卫周大胖的学习日记&a…...
c++函数怎么返回多个值
文章目录 使用结构体或类:定义一个结构体或类,其中包含了所有需要返回的值。然后在函数中返回这个结构体或类的实例。 struct Result {int value1;double value2;char value3; };Result myFunction() {Result r;r.value1 1;r.value2 2.0;r.value3 a;r…...
《剑指 Offer》专项突破版 - 面试题 15 : 字符串中的所有变位词(C++ 实现)
题目链接:LCR 015. 找到字符串中所有字母异位词 - 力扣(LeetCode) 题目: 输入字符串 s1 和 s2,如何找出字符串 s2 的所有变位词在字符串 s1 中的起始下标?假设两个字符串中只包含英文小写字母。例如&…...
03 SpringMVC响应数据之接收Cookie和请求头+原生API+共享域对象操作
下载postman,测试传json数据 1. 接收cookie 用CookieValue注解将cookie值绑定到控制器中的handler参数。 Controller类中的一个handler GetMapping("/CookieTest") public void handle(CookieValue("cookie的id(name)") String cookie) { //... }2. 接收…...
数据仓库(3)-模型建设
本文从以下9个内容,介绍数据参考模型建设相关内容。 1、OLTP VS OLAP OLTP:全称OnLine Transaction Processing,中文名联机事务处理系统,主要是执行基本日常的事务处理,比如数据库记录的增删查改,例如mysql、oracle…...
交换机配置及网络测试
实验环境 拓扑图 Ip规划表 部门 主机数量 网络地址 子网掩码 网关 可用ip Vlan 市场部 38 192.168.131.0 255.255.255.0 192.168.131.1 2-254 11 研发部 53 192.168.132.0 255.255.255.0 192.168.132.1 2-254 12 财务部 9 192.168.133.0 255.255.255…...
贪吃蛇游戏
文章目录 前言一.Win32API1.1GetStdHandle1.2GetConsoleCursorInfo1.3SetConsoleCursorInfo1.4SetConsoleCursorPosition1.5GetAsyncKeyState1.6setlocale二.游戏设计三.GameStart3.1蛇的创建3.2分文件3.3控制台设置3.4WelComeToGame3.5CreateMap3.6InitSnack3.7CreateFood 四.…...
DPDK trace 的简单使用
文章目录 前言trace的简单使用 前言 日志用于记录不太频繁,比较高level的事情。trace记录频繁发生的事情,它的开销低。 trace可以在运行时,通过参数控制是否启用;可以在任何时间点,将trace记录的缓冲区保存到文件系统…...
《游戏-01_2D-开发》
首先利用安装好的Unity Hub创建一个unity 2D(URP渲染管线)项目 选择个人喜欢的操作格局(这里采用2 by 3) 在Project项目管理中将双栏改为单栏模式(个人喜好) 找到首选项(Preferences)…...
如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?
今天boke112百科登录某个WordPress站点时,又出现“管理员邮件确认”的提示,要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示: 如果点击“稍后提醒我”,那么管理员邮件验证页面就会在3天后重新显示。 说实话&…...
三、MySQL实例初始化、设置、服务启动关闭、环境变量配置、客户端登入(一篇足以从白走到黑)
目录 1、选择安装的电脑类型、设置端口号 2、选择mysql账号密码加密规则 3、设置root账户密码 4、设置mysql服务名和服务启动策略 5、执行设置(初始化mysql实例) 6、完成设置 7、MySQL数据库服务的启动和停止 方式一:图形化方式 方式…...
Ubuntu20.04-剪贴板
针对图形界面用户 1.两种方式 1.1 安装Parcellite 简单轻量级剪贴板管理器 sudo apt install parcellite 1.2 安装Gpaste 更强大的剪贴板管理器,包含历史记录和同步功能 sudo apt install gpaste...
springmvc常用的组件
SpringMVC常用组件 以下的Handler也叫Controller。 1、DispatcherServlet:前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 2、H…...
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
场景 Mysql中怎样设置指定ip远程访问连接: Mysql中怎样设置指定ip远程访问连接_navicat for mysql 设置只有某个ip可以远程链接-CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式,如果通过可视化工具比如Navicat来实现。 注:…...
vue2+webpack升级vue3+vite,报错Cannot read properties of null (reading ‘isCE‘)
同学们可以私信我加入学习群! 正文开始 前言问题分析解决总结 前言 系列文章:vue2webpack升级vue3vite,修改插件兼容性bug 前面的文章主要是介绍,在升级初始阶段遇到的一些显而易见的兼容性问题和bug。随着项目迭代的不断深入&a…...
FastAPI GraphQL联合服务发现:构建现代化微服务架构的完整指南
FastAPI GraphQL联合服务发现:构建现代化微服务架构的完整指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi 在当今云原生…...
SEO 搜索引擎营销工具如何帮助网站进行社交媒体营销_SEO 搜索引擎营销工具如何分析网站用户行为
SEO 搜索引擎营销工具如何帮助网站进行社交媒体营销 在当前数字化营销的浪潮中,SEO(搜索引擎优化)搜索引擎营销工具已经成为了许多企业和网站必不可少的工具。SEO工具不仅能够帮助网站提高在搜索引擎中的排名,还在社交媒体营销方…...
Multisim仿真NE555驱动MOS管总报错?手把手教你调整收敛参数搞定它
Multisim仿真中NE555驱动MOS管报错的深度解决方案 在电子电路仿真领域,Multisim作为一款功能强大的工具,被广泛应用于教学和工程实践中。然而,当涉及到非线性元件如MOSFET与NE555定时器结合使用时,许多工程师和学生都会遇到一个令…...
5大核心模块全面释放NVIDIA显卡潜能:从新手到专家的调校指南
5大核心模块全面释放NVIDIA显卡潜能:从新手到专家的调校指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾疑惑为什么同款显卡在不同游戏中的表现差异显著?为什么专业…...
CPS实战:如何用树莓派+传感器搭建你的第一个信息物理系统(附代码)
CPS实战:如何用树莓派传感器搭建你的第一个信息物理系统(附代码) 信息物理系统(CPS)听起来像是高科技实验室里的复杂装置,但实际上,你完全可以用手边的树莓派和几十元的传感器搭建一个功能完整的…...
Qwen3-ForcedAligner-0.6B完整指南:音频格式支持/实时录音/时间戳导出全解析
Qwen3-ForcedAligner-0.6B完整指南:音频格式支持/实时录音/时间戳导出全解析 你是不是也遇到过这样的烦恼?开会录音想整理成文字,手动打字累到怀疑人生;做视频需要加字幕,一句一句对时间轴对到眼花。今天要介绍的这个…...
LFM2.5-1.2B-Thinking-GGUF惊艳效果:32K上下文下长文档关键信息抽取准确率实测
LFM2.5-1.2B-Thinking-GGUF惊艳效果:32K上下文下长文档关键信息抽取准确率实测 1. 模型效果实测背景 LFM2.5-1.2B-Thinking-GGUF作为Liquid AI推出的轻量级文本生成模型,在低资源环境下展现出令人惊喜的性能表现。本次测试聚焦于模型在32K超长上下文环…...
OpenClaw多账户管理:千问3.5-9B自动切换社交平台身份
OpenClaw多账户管理:千问3.5-9B自动切换社交平台身份 1. 为什么需要自动化多账户管理 作为一个长期运营多个社交媒体账号的内容创作者,我每天需要切换不同平台的账号身份。手动登录不仅耗时,还经常遇到浏览器缓存混乱导致账号异常的问题。更…...
给SoC新手的保姆级指南:手把手用Verilog实现一个APB总线读写控制器
给SoC新手的保姆级指南:手把手用Verilog实现一个APB总线读写控制器 第一次接触AMBA总线时,那些密密麻麻的时序图总让人望而生畏。作为ARM公司设计的片上总线标准,APB(Advanced Peripheral Bus)以其简单的两相握手协议成为初学者理解总线通信的…...
Harness Engineering 核心概念详解
文章目录1. Harness Engineering 的本质定义1.1 核心定义1.2 诞生的历史时刻1.3 "Harness" 的本意2. Agent Model Harness 核心公式2.1 公式解读2.2 LangChain 工程师的精炼定义2.3 类比:CPU 与操作系统3. Harness 三大支柱详解3.1 支柱一:上…...
