技术总结(四)

embedded/2024/10/22 14:27:26/

一、什么是进程和线程,他们之前区别是什么?

  • 进程(Process) 是指计算机中正在运行的一个程序实例。举例:你打开的微信就是一个进程。
  • 线程(Thread) 也被称为轻量级进程,更加轻量。多个线程可以在同一个进程中同时执行,并且共享进程的资源比如内存空间、文件句柄、网络连接等。举例:你打开的微信里就有一个线程专门用来拉取别人发你的最新的消息。

          

从上面的图看出:一个进程中可以有多个线程,多个线程共享进程的方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器虚拟机栈 和 本地方法栈

  1. 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。
  2. 线程执行开销小,但不利于资源的管理和保护;而进程正相反。

二、为什么要使用多线程?

一、提高资源利用率

CPU 资源

  • 在单线程环境下,如果一个任务因为 I/O 操作(如读取文件、网络请求)而阻塞,CPU 就会处于空闲状态等待 I/O 操作完成。而多线程可以在一个线程等待 I/O 时,让其他线程利用 CPU 资源执行其他任务,从而提高 CPU 的利用率。
二、提高程序响应速度

网络应用

  • 对于网络服务器,如 Web 服务器,多线程可以同时处理多个客户端的请求。当一个线程正在处理一个客户端的复杂请求(如数据库查询等耗时操作)时,其他线程可以快速响应新的客户端连接请求,使得整个服务器的响应速度更快。
三、更好地处理并发任务

并行处理任务

  • 对于一些本身可以并行处理的任务,如矩阵运算、图像渲染等,多线程可以将任务分解并在多个线程中并行执行,从而加快任务的完成速度。例如,在 3D 渲染中,不同的线程可以负责渲染场景中的不同部分,然后将结果合并。

三、线程的同步方式有那些?

线程同步是两个或多个共享关键资源的线程的并发执行。应该同步线程以避免关键的资源使用冲突。

下面是几种常见的线程同步的方式:

  1. 互斥锁(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。
  2. 读写锁(Read-Write Lock):允许多个线程同时读取共享资源,但只有一个线程可以对共享资源进行写操作。
  3. 信号量(Semaphore):它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量
  4. 事件(Event) :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

四、进程有那几种状态

  • 创建状态(new):进程正在被创建,尚未到就绪状态
  • 就绪状态(ready):进程已处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行。
  • 运行状态(running):进程正在处理器上运行(单核 CPU 下任意时刻只有一个进程处于运行状态)。
  • 阻塞状态(waiting):又称为等待状态,进程正在等待某一事件而暂停运行如等待某资源为可用或等待 IO 操作完成。即使处理器空闲,该进程也不能运行。
  • 结束状态(terminated):进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。

      


http://www.ppmy.cn/embedded/127628.html

相关文章

QT:信号与槽

QT是一种流行的C框架,用于开发图形用户界面(GUI)应用程序。在QT中,信号与槽是一种用于实现对象间通信的机制。 信号(signal)是对象发出的事件或消息,槽(slot)是接收并处…

【SQL】写SQL查询时,常用到的日期函数

我们在做SQL的查询,日期函数是我们经常会用得到的函数,可以方便调用用于处理日期和时间数据。 以下是一些常见的日期函数及其用法示例: 1. 直接报出日期和时间 CURRENT_DATE:返回当前日期。NOW():返回当前日期和时间…

[论文阅读] DVQA: Understanding Data Visualizations via Question Answering

原文链接:http://arxiv.org/abs/1801.08163 启发:没太读懂这篇论文,暂时能理解的就是本文提出了一个专门针对条形图问答的数据集DVQA以及一个端到端模型SANDY,模型有两个版本,Oracle和OCR。主要解决的问题是固定词表无…

[M数学] lc3164. 优质数对的总数 II(因数分解+倍增+推公式+思维+好题)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:3164. 优质数对的总数 II 2. 题目解析 挺不错的一道 因数分解、倍增 的题目,需要一定的思维和推公式的能力才能解决。灵神的题解已经非常清晰易懂了,可以直接去看。 倍增思路&#xff…

MySQL--视图(详解)

目录 一、前言二、视图2.1概念2.2语法2.3创建视图2.3.1目的 2.4查看视图2.5修改数据2.5.1通过真实表修改数据,会影响视图2.5.2通过修改视图,会影响基表 2.6注意2.7 删除视图2.8 视图的优点 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导&…

Oracle中处理空值函数(NVL、NVL2、NULLIF等)详解

文章目录 前言一、函数语法NVL函数NVL2函数NULLIF函数COALESCE函数DECODE函数 二、用法区别三、测试用例总结 前言 本文将介绍Oracle中处理空值的函数。常用的处理函数有:NVL()、NVL2()、NULLIF()、COALESCE()。此外DECODE()和CASE()函数也可以起到处理空值的效果。…

Windows Server环境部署Oracle 19c

Windows Server环境部署Oracle 19c 1.安装包下载2.安装运行库3. 数据库安装前期规划4. 数据库安装4.1 解压4.2 开始安装4.3 配置选项4.4 系统类4.5 Oracle主目录用户4.6 典型安装4.7 先决条件检测4.8 概要4.9 安装产品4.10 完成 5. 连接数据库 1.安装包下载 Oracle19c安装包下…

uniapp学习(004-1 组件 Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第26p-第p30的内容 文章目录 uniapp和vue差异对比写几个组件并且引用props传值添加类型约束约束类型并且添加默…