【1】c++多线程技术之线程基础概念

1、进程与线程的区别

进程和线程是现代操作系统中并发执行程序的两种实体,它们之间存在一些本质的区别。具体分析如下:

  • 进程:进程是操作系统资源分配的基本单位,每个进程都有自己独立的地址空间,包括代码、数据和堆栈等。进程间的资源如内存、I/O设备和CPU时间等都是相互独立的,这有助于操作系统进行资源管理和保护。进程具有独立性、并发性、异步性和动态性的特点。创建进程需要为其分配独立的资源,因此创建和销毁进程的开销比较大。
  • 线程:线程是进程中的一个执行流程,它是轻量级的执行单元。所有线程共享所属进程的资源和地址空间。线程之间的切换比进程之间的切换更快,因为线程有共享进程的资源特性,所以它们的创建和终止开销小于进程。线程适用于需要进行频繁切换和并发执行的任务。

进程是资源分配的独立单位,拥有独立的地址空间和资源,而线程则是进程中的执行单元,共享进程资源和地址空间。在多任务操作系统中,进程和线程共同工作以实现并行处理和任务调度,提高了系统资源的利用效率和程序执行的效率。

2、并发与并行

并发和并行是两种不同的执行过程管理方式。以下是具体分析:

  • 并发(Concurrency):指的是多个任务在同一时间段内交替运行,它们在宏观上是同时发生的,但在微观上是轮流使用CPU资源。并发的关键在于CPU的快速切换,使得每个任务都能够得到一定的执行时间,尽管它们实际上并没有同时执行。并发的典型场景是一个处理器通过时间片轮转或多任务操作系统管理来同时处理多个任务。
  • 并行(Parallelism):指的是多个任务在同一时间点上真正地同时执行。这通常需要多个处理单元,如多核CPU或多CPU系统。在并行处理中,每个任务都拥有独立的资源,因此它们可以不受其他任务干扰地同时运行。并行的典型场景是多核处理器或多处理器系统中,每个核心或处理器独立执行一个任务。

3、线程的生命周期

线程的生命周期指的是从创建到销毁过程中经历的各个阶段。

  • 新建状态(New):当创建一个线程对象时,该线程处于新建状态,尚未启动。
  • 就绪状态(Runnable):线程对象被启动后(例如调用start()方法),线程进入就绪状态,这意味着它已经准备好执行,但还在等待CPU分配时间片。
  • 运行状态(Running):当线程获得CPU时间片后,它将进入运行状态,开始执行其任务。
  • 阻塞状态(Blocked):线程在等待某个资源(如I/O操作完成或获取锁)时会进入阻塞状态。
  • 等待状态(Waiting):线程在某些特定条件下,如等待其他线程执行某个动作,会进入等待状态。
  • 计时等待状态(Timed Waiting):与等待状态类似,但在此状态下的线程等待某个特定时间段或在某个时间点前被唤醒。
  • 终止状态(Terminated):线程完成执行或因异常而终止时,会进入终止状态。

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

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

相关文章

性能优化-01

当看到性能指标时,你会首先想到什么呢?我相信 “高并发” 和 “响应快” 一定是最先出现在你脑海里的两个词,而它们也正对应着性能优化的两个核心指标—— “吞吐” 和 “延时” 。这两个指标是从应用负载的视角来考察性能,直接影…

Chatgpt掘金之旅—有爱AI商业实战篇|SEO 咨询业务|(十七)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、AI技术创业在SEO 咨询业务有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随…

python基础语法+爬虫+图像处理+NumpyPandas数据处理(12天速成,第6天中-列表生成式)

1、列表生成式1 非常方便的得到一个列表 [元素 for遍历 if筛选]l1 [x for x in range(1,21)] # range(1,21) 生成[1,21)包左不包右的列表 print(l1)l2 [x*x for x in range(1,21)] print(l2)l3 [x for x in range(1,21) if x%2 0] print(l3)# 得到20个&#xf…

RTOS Lab report:Task-List Management in the RTOS Kernel

Task-List Management in the RTOS Kernel Ⅰ Introduction Much of the administration in a real‐time kernel consists of list management. In this initial step, we create three different lists and operate them as follows: • Create functions that can input a…

springboot+vue高校贫困生资助勤工俭学管理系统python

本次开发一套贫困生资助管理系统有管理员和用户两个角色。管理员功能有个人中心,学生管理,院校管理,贫困申请管理,资助项目管理,资助申请管理,资助发放管理,勤工俭学管理,岗位申请管…

大语言模型LLM《提示词工程指南》学习笔记04

文章目录 大语言模型LLM《提示词工程指南》学习笔记04数据生成生成代码完成函数,继续下一行生成其他有用的代码,例如创建和测试MySQL查询代码解释 提示函数 大语言模型LLM《提示词工程指南》学习笔记04 数据生成 LLMs具有生成连贯文本的强大能力。使用…

CMake构建OpenCv并导入QT项目过程中出现的问题汇总

前言 再此之前请确保你的环境变量是否配置,这是总共需要配置的环境变量 E:\cmake\bin E:\OpenCv\opencv\build\x64\vc15\bin F:\Qt\Tools\mingw730_64\bin F:\Qt\5.12.4\mingw73_64\bin 问题一: CMake Error: CMake was unable to find a build program…

Linux网络 基础概念

目录 背景知识 互联网的发展 局域网和广域网 网络拓扑 网络协议栈 协议的概念 网络协议的分层 网络与操作系统的联系 网络传输的基本流程 IP地址和MAC地址 以太网通信 数据包的封装和分用 跨网段传输 背景知识 互联网的发展 计算机网络是计算机技术和通信技术相…

MyBatis 执行流程

加载配置文件:MvBatis 的执行流程从加载配置文件开始。通常,MyBatis 的配置文件是一个 XML 文件,其中包含了数据源配置、SQL 映射配置、连接池配置等信息。构建 SqlSessionFactory:在配置文件加载后,MyBatis 使用配置信息来构建 SqlSessionFa…

【Android Studio报错】:* What went wrong:Out of memory. Java heap space

项目场景: 今天,刚打开自己的安卓项目发现报错: 报错: * What went wrong: Out of memory. Java heap space Possible solution: - Check the JVM memory arguments defined for the gradle process in: gradle.properties in…

路由器端口映射是什么意思?

路由器端口映射是一种网络配置技术,在私有网络中允许外部网络访问特定的服务或应用程序。通过将路由器的端口映射到内部客户端设备,可以实现从公共网络访问内部网络资源的目的。 天联组网介绍 天联是一款异地组网内网穿透产品,由北京金万维科…

网工基础协议——IP地址

IP地址的概念: IP 地址是我们进行TCP/IP通讯的基础,每个连接到网络上的计算机都必须有一个!P地址。我们目前使用的IP地址是32位的,通常以点分十进制表示。例如:192.168.0.181。IP地址的格式为: IP地址 网络地址 主机地址 或者 |P地址主机地…

windows ffmpeg7 通过rtsp拉取h265裸流

点击下边那个链接会转到github 下载完成后,添加include、lib到工程。 添加头文件: extern "C" { #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavformat/avio.h" #inclu…

【opencv】示例-detect_blob.cpp

// 导入所需的OpenCV头文件 #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/features2d.hpp> // 导入向量和映射容器 #include <vector> #include <map> // 导入输入输出…

微软卡内基梅隆大学:无外部干预,GPT4等大语言模型难以自主探索

目录 引言&#xff1a;LLMs在强化学习中的探索能力探究 研究背景&#xff1a;LLMs的在情境中学习能力及其重要性 实验设计&#xff1a;多臂老虎机环境中的LLMs探索行为 实验结果概览&#xff1a;LLMs在探索任务中的普遍失败 成功案例分析&#xff1a;Gpt-4在特定配置下的探…

【QT入门】Qt自定义控件与样式设计之qss的加载方式

往期回顾 【QT入门】 Qt自定义控件与样式设计之QPushButton点击按钮弹出菜单-CSDN博客 【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式 …

JDBC看这一篇就够了

JDBC核心技术 第1章&#xff1a;JDBC概述 1.1 数据的持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久…

centos7上docker搭建vulhub靶场

1 vulhub靶场概述 VulHub是一个在线靶场平台&#xff0c;提供了丰富的漏洞环境供安全爱好者学习和实践。 该平台主要面向网络安全初学者和进阶者&#xff0c;通过模拟真实的漏洞环境&#xff0c;帮助用户深入了解漏洞的成因、利用方式以及防范措施。 此外&#xff0c;VulHub还…

Kubernetes学习笔记7

使用kubeadm部署Kubernetes集群方法 使用kubernetes部署单节点Master节点K8s集群。 在实际生产环境中&#xff0c;是不允许单master节点的&#xff0c;如果单master节点不可用的话&#xff0c;当导致我们的K8s集群无法访问。 可以使用kubeadm将单master节点升级为多master节点…

ResultBuilder学习笔记三:支持循环

ResultBuilder学习笔记三&#xff1a;支持循环 我们在前面的博文中创建了一个非常简单的结果构建器ConcatBuilder&#xff0c;用于连接多个字符串&#xff0c;随后在后续博文中对之进行了扩展&#xff0c;使其可以支持自定义的输入数据类型&#xff0c;这个特性非常重要&#…