当前位置: 首页 > news >正文

c/cpp - 多线程/进程 基础

c/cpp - 多线程/进程 基础

  • 1. 概念
    • 1.1 程序
    • 1.2 任务
    • 1.3 多任务
    • 1.4 进程
    • 1.5 线程
    • 1.5 线程/进程
    • 应用程序/系统资源
    • 并发/并行/同步/异步

1. 概念

1.1 程序

代码、指令,静态的

1.2 任务

具体要做的实景,可以是基于进程、或基于线程

1.3 多任务

例如:当执行的程序执行I/O操作时,操作系统会将CPU资源分配给其他等待执行的程序

两种类型的多任务
基于进程:基于进程的多任务处理,是程序的并发执行
基于线程:基于线程的多任务处理,是同一程序的片段的并发执行

1.4 进程

进程正在执行的应用程序,多任务操作系统可以控制各个进程的执行状态,如:终止某个正在执行的进程,启动某个暂停执行的进程
是动态的,程序的实例化
操作系统负责为每个进程分配独立的内存和其他资源(I/o设备,文件等)
进程执行完毕后,操作系统会将进程占用的资源全部回收

补充-早期多进程

早期的做任务操作系统,是以进程为单位管理各个程序的运行以及计算机的分配和回收
缺点:

  1. 操作系统将CPU资源从一个进程分配给另一个进程时,开销较大
  2. 各个进程占用的内存空间相互独立,进程间通信难度大
  3. 一个进程可能会执行多个任务(子任务),当某个任务因I/O操作暂停执行时,其他任务将无法执行(在无多线程的情况下)

1.5 线程

为解决早起多进程缺点,引入线程

线程执行应用程序中的某个具体任务(进程:正在执行的应用程序)(具体任务:一段程序等)
一个进程可以有多个线程,线程之间共享进程的资源

1.5 线程/进程

进程之间独立
进程内为多个线程提供资源
进程内多个线程共享资源
进程内每个线程不同的具体任务
进程内各个线程可以拥有自己的独立私有资源

每个进程执行前,操作系统会为其分配所需的资源:程序代码、数据、内存空间、文件资源等
一个进程必须包含至少一个线程(主线程)

/*
公司(程序1):一个多进程的程序进程1(工厂1)- 线程1(工人1)- 线程2(工人2)进程2(工厂2)- 线程3(工人3)- 线程4(工人4)
*/

应用程序/系统资源

操作系统支持同时执行多个应用程序,为避免多个应用程序访问系统资源(文件资源、I/O设备、网络等)时产生冲突,操作系统会将可能产生冲突的系统资源保护起来,阻止应用程序直接访问
应用程序需要访问系统资源时,需要调用系统API

并发/并行/同步/异步

  • 并发

计算机能够同时执行多项任务;
并发的形式有许多不同:

单核处理器:时间分片的形式,一个任务执行一段时间,也就是任务交替进行。也被称为进程或者线程的上下文切换
多核处理器:在多个核心上,真正并行的执行任务,也就是以并行的形式实现并发

  • 并行

多核心并行执行任务
在这里插入图片描述

  • 同步

同步:必须等到前一个任务执行完毕之后,才能执行下一个任务
在同步中,没有并发和并行的概念

在这里插入图片描述

  • 异步

不同任务之间,并不会相互等待,先后执行(即在执行任务A的时候,也可以同时执行任务B)
也就多线程编程
在这里插入图片描述

补充

多线程编程:多核心并发,适用于计算密集型应用程序
单线程异步编程:强制单核心并发,适用于I/O操作密集型应用程序

http://www.lryc.cn/news/36803.html

相关文章:

  • 第55章 头像图片的前端渲染显示
  • vue2 使用 cesium 【第二篇-相机视角移动+添加模型】
  • C/C++ 操作ini文件(SinpleIni 跨平台库)
  • Cadence Allegro 导出Design Rules Check(DRC)Report报告详解
  • Java的stream流
  • Mybatis_相关配置解析和ResultMap
  • Python量化入门:利用中长期RSI寻找趋势拐点,抓大放小,蹲一个大机会!
  • 案例14-代码结构逻辑混乱,页面设计不美观
  • 弱监督参考图像分割:Learning From Box Annotations for Referring Image Segmentation论文阅读笔记
  • Linux进程和任务管理和分析和排查系统故障
  • 【满分】【华为OD机试真题2023 JAVA】最多几个直角三角形
  • PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局
  • sonarqube指标详解
  • 耳机 喇叭接线分析
  • SpaceNet 建筑物检测
  • 蓝桥杯刷题第六天
  • Linux C++ 多线程高并发服务器实战项目一
  • QML ComboBox简介
  • uniapp使用webview嵌入vue页面及通信
  • 深度学习部署笔记(九): CUDA RunTime API-2.1内存管理
  • Idea+maven+spring-cloud项目搭建系列--11-2 dubbo鉴权日志记录数据统一封装
  • SOLIDWORKS免费培训 SW大型装配体模式课程
  • xxl-job registry fail
  • 【C#进阶】C# 反射
  • 公网NAT网关与VPC NAT网关介绍与实践
  • Windows中UWP、WPF和Windows窗体的区别
  • Flink从入门到精通系列(一)
  • 云原生应用风险介绍
  • 什么是测试用例设计?
  • 数据分析:基于K-近邻(KNN)对Pima人糖尿病预测分析