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

C# 异步编程模型(APM)的深入理解

在现代软件开发中,异步编程已经成为了一种不可或缺的技能。特别是在需要处理I/O密集型任务或长时间运行的操作时,异步编程能够显著提高应用程序的性能和用户体验。C# 作为一种流行的编程语言,提供了多种异步编程模型,其中最经典的就是异步编程模型(Asynchronous Programming Model,简称 APM)。

1. 异步编程的基本概念及其在C#中的实现

异步编程是一种编程范式,允许任务在后台执行,而不是在主线程上阻塞等待。这样,主线程可以继续处理其他任务,从而提高了应用程序的响应性和性能。

在 C# 中,异步编程主要通过 async 和 await 关键字来实现。这两个关键字使得编写异步代码变得更加简单和直观。async 关键字用于声明异步方法,而 await 关键字用于等待异步操作的完成。

2. C#异步编程模型的优势和适用场景

C# 异步编程模型的主要优势在于:

  • 提高性能和响应性:通过异步操作,可以避免线程阻塞,减少等待时间,提高应用程序的性能和响应性。

  • 更好的资源利用:异步编程允许单个线程处理多个任务,从而更好地利用系统资源。

  • 简化的编程模型:C# 的 async 和 await 关键字使得异步编程变得更加简单和直观。
    适用场景包括:

  • 网络编程:下载文件、发送请求等操作往往需要较长时间,异步编程可以提高应用程序的响应性。

  • 文件操作:读写文件等操作可能会阻塞线程,使用异步编程可以避免这种情况。

  • 数据库操作:数据库查询和操作通常需要时间,异步编程可以提高应用程序的性能。

3. 常见的异步编程模式(如APM)在C#中的应用示例

使用APM进行异步编程
APM 是基于回调和事件的异步编程模型。下面是一个简单的 APM 示例:

public class AsyncExample
{public delegate void AsyncOperationDelegate(object state);public void AsyncMethod(object state){AsyncOperation op = AsyncOperationManager.CreateOperation(state);// 开始异步操作BeginAsyncOperation(op);}private void BeginAsyncOperation(AsyncOperation op){// 模拟长时间运行的操作Thread.Sleep(1000);// 通知异步操作完成op.Post(EndAsyncOperation, null);}private void EndAsyncOperation(object state){// 异步操作完成后的处理Console.WriteLine("Async operation completed.");}
}// 使用示例
AsyncExample example = new AsyncExample();
example.AsyncMethod(null);

在这个例子中,AsyncMethod 是一个异步方法,它接受一个 state 对象作为参数。AsyncOperation 类用于管理异步操作的状态。BeginAsyncOperation 方法用于启动异步操作,并在操作完成后使用 Post 方法通知调用者。

4. 如何性能地使用C#异步编程模型进行程序设计

要有效地使用 C# 异步编程模型,可以遵循以下最佳实践:

  • 使用 async 和 await:尽可能使用 C# 提供的 async 和 await 关键字来编写异步代码,它们提供了更好的可读性和简化了异步编程。
  • 避免过多的异步:虽然异步编程有很多优点,但过度使用也会导致代码复杂和性能问题。根据实际需求合理使用异步。
  • 合理管理线程池:异步编程会使用线程池,因此需要合理管理线程的使用,避免线程资源耗尽。
  • 处理异常:异步操作可能会抛出异常,确保正确处理这些异常,避免程序崩溃。

5. 面临的挑战(如并发性、数据持久性等)以及相应的解决方案

异步编程面临的主要挑战包括:

  • 并发性:在多线程环境中,异步编程可能会引入复杂的并发性问题。确保使用适当的同步机制(如锁、信号量等)来管理共享资源。
  • 数据持久性:异步操作可能会在数据未完全写入磁盘或数据库之前就返回,需要确保异步操作的数据持久性。
  • 异常处理:异步操作的异常处理比同步操作更为复杂,需要确保能够正确处理和传递异常。
  • 调试和测试:异步代码的调试和测试比同步代码更为困难,需要使用特殊的工具和技术来帮助调试和测试。

解决方案:

  • 使用 async 和 await:C# 提供的 async 和 await 关键字可以帮助简化异步代码,减少并发性问题。
  • 使用 Task 和 ThreadPool:利用 Task 类和线程池可以管理异步操作的线程,减少线程资源耗尽的风险。
  • 使用 lock 和 Monitor:使用锁可以确保在异步操作中访问共享资源时的线程安全。
  • 使用 await 而不是 AsyncWaitHandle:使用 await 关键字可以简化异步等待的操作,避免使用 AsyncWaitHandle 等复杂的等待机制。
  • 使用 TaskCatchException:可以使用 Task.WaitAll() 和 Task.ContinueWith() 来处理异常,或者使用AggregateException 来处理多个任务的异常。
  • 使用测试框架和工具:使用如 Moq、xUnit 和 NUnit 等测试框架和工具可以帮助测试异步代码,确保其正确性和性能。

6. APM 的优缺点

优点:

  • 提高了程序的性能和响应性:通过异步操作,可以避免线程阻塞,从而提高程序的性能和响应性。
  • 简化了异步编程:APM 通过回调和事件来处理异步操作,使得异步编程变得更加简单易懂。

缺点:

  • 代码复杂性:由于异步操作涉及到回调和事件,因此代码可能会变得比较复杂,难以维护。
  • 性能开销:回调和事件会导致一定的性能开销,特别是在大量使用的情况下。

结论

C# 异步编程模型(APM)是一种在不阻塞主线程的情况下执行长时间运行的操作的方法。尽管现代 C# 开发中更倾向于使用 async 和 await,但 APM 在一些旧式应用程序中仍然是一种实用的异步编程方式。理解和掌握 APM 可以帮助开发人员更好地处理 I/O 密集型任务,提高应用程序的性能和用户体验。

在实际应用中,选择合适的异步编程模型取决于具体的业务需求、性能要求和开发复杂度。无论使用哪种模型,都需要注意线程安全、异常处理和数据持久性等问题,以确保异步程序的稳定性和可靠性。

相关文章:

C# 异步编程模型(APM)的深入理解

在现代软件开发中,异步编程已经成为了一种不可或缺的技能。特别是在需要处理I/O密集型任务或长时间运行的操作时,异步编程能够显著提高应用程序的性能和用户体验。C# 作为一种流行的编程语言,提供了多种异步编程模型,其中最经典的…...

janus模块介绍-SIP Gateway

模块启动 默认的SIP GateWay也是https协议,端口为8088或者8089 如果需要在自己搭建的测试服务上测试SIP GateWay模块,则也需要修改为wss 具体改动如下: 找到/opt/janus/share/janus/demos/siptest.js var server "wss://" window.location…...

wstunnel (websocket模式ssh)

接上一篇 修改客户端运行参数 ssh -o ProxyCommand"./wstunnel client -L stdio://%h:%p ws://192.168.254.131:8080" 127.0.0.1 其中127.0.0.1为服务端的本地ssh访问,可以修改为通过服务端访问其他设备的ssh服务。例如: ssh -o ProxyComma…...

linux文件相关命令

一、linux文件相关命令 1、cd cd 是 “change directory” 的缩写,用于改变当前工作目录。 cd :不带任何参数时,会切换到用户的主目录(通常是 /home/用户名)。 cd ~:也会切换到用户的主目录。 cd .&…...

锂电池寿命预测 | Matlab基于GRU门控循环单元的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于GRU门控循环单元的锂电池寿命预测 Matlab基于GRU的锂电池剩余寿命预测 基于GRU的锂电池剩余寿命预测(单变量) 运行环境Matlab2020及以上 锂电池的剩余寿命预测是…...

通往AGI路上,DPU将如何构建生成式AI时代的坚实算力基石?

4月19日,在以“重构世界 奔赴未来”为主题的2024中国生成式AI大会上,中科驭数作为DPU新型算力基础设施代表,受邀出席了中国智算中心创新论坛,发表了题为《以网络为中心的AI算力底座构建之路》主题演讲,勾勒出在通往AGI…...

无人驾驶 自动驾驶汽车 环境感知 精准定位 决策与规划 控制与执行 高精地图与车联网V2X 深度神经网络学习 深度强化学习 Apollo

无人驾驶 百度apollo课程 1-5 百度apollo课程 6-8 七月在线 无人驾驶系列知识入门到提高 当今,自动驾驶技术已经成为整个汽车产业的最新发展方向。应用自动驾驶技术可以全面提升汽车驾驶的安全性、舒适性,满足更高层次的市场需求等。自动驾驶技术得益于人工智能技术的应用…...

【QEMU系统分析之启动篇(十九)】

系列文章目录 第十九章 QEMU系统仿真的加速器上电后设置分析 文章目录 系列文章目录第十九章 QEMU系统仿真的加速器上电后设置分析 前言一、QEMU是什么?二、QEMU系统仿真的启动分析1.系统仿真的初始化代码2.主循环数据初始化3. os_setup_post()Windows 系统 os_set…...

Jmeter redis连接测试

Jmeter连接redis获取数据,一直连不上报错。最后只能通过java代码连接测试,最后只能自己动手。 import redis.clients.jedis.*;import java.io.IOException; import java.util.HashSet; import java.util.Set;/*** 单机版的Jedis连接池的用法*/ public c…...

使用Uiautomotorviewer无法获取手机页面元素+解决办法

在进行 Android 应用程序开发或测试时,有时会遇到以下错误: Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException这个错误可能会导致开发或测试过程中的一些困扰,但有一个简单的解决方法: 解决方法…...

深度相机(3D相机)

传统的RGB彩色相机称为2D相机, 只能得到2D的图像信息, 无法得到物体与相机的距离信息,也就是深度信息。 顾名思义, 深度相机除了获取2D信息,还能得到深度信息,也叫RGBD相机, 或3D相机。 顺便提…...

了解时间复杂度和空间复杂度

在学习数据结构前,我们需要了解时间复杂度和空间复杂度的概念,这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率 时间复杂度 一个算法的复杂度与其执行的次数成正比。算法中执行基础操作的次数,为算法的时间复杂度。 我们采…...

[笔试强训]day2

1.牛牛的快递 题目链接:牛牛的快递_牛客题霸_牛客网 思路:分小于1.0kg和大于1.0kg,其中大于1.0kg的要“向上取整” ,eg:1.7->2,2.0->2。注意一个点:第二个输入的参数是字符,要…...

android脱壳第二发:grpc-dumpdex加修复

上一篇我写的dex脱壳,写到银行类型的app的dex修复问题,因为dex中被抽取出来的函数的code_item_off 的偏移所在的内存,不在dex文件范围内,所以需要进行一定的修复,然后就停止了。本来不打算接着搞得,但是写了…...

在 TypeScript 中declare module 关键字用法

在 TypeScript 中,declare module 关键字用于声明模块的类型信息,这种声明通常出现在声明文件(通常是 .d.ts 文件)中。这对于当你需要为现有的 JavaScript 库或模块提供类型信息时非常有用,尤其是对于没有提供自己的类…...

NLP step by step -- 了解Transformer

Transformer模型 Transformer相关历史 首先我们先看一下有关Transformer模型的发展历史,下面的图是基于Transformer架构的一些关键模型节点: 图片来源于Hugging Face 图片来源于Hugging Face Transformer 架构 于 2017 年 6 月推出。原本研究的重点是…...

【Leetcode】vector刷题

🔥个人主页:Quitecoder 🔥专栏:Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接:136.只出现一…...

【图解计算机网络】从浏览器地址输入到网页显示的整个过程

从浏览器地址输入到网页显示的整个过程 整体流程DHCPhttp协议报文组装DNSTCP协议封装与TCP三次握手IP协议封装与路由表MAC地址与ARP协议交换机路由器 整体流程 从往浏览器输入一个地址到网页的显示,要经过很长的一个流程,中间涉及到计算机网络的许多知识…...

liqo学习及安装,k8s,kubernetes多集群互联

先按照官方的教程在虚拟机安装学习 在开始以下教程之前,您应该确保您的系统上安装了以下软件: Docker,容器运行时。Kubectl,Kubernetes 的命令行工具。 curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.…...

五种主流数据库:集合运算

关系型数据库中的表与集合理论中的集合类似,表是由行(记录)组成的集合。因此,SQL 支持基于数据行的各种集合运算,包括并集运算(Union)、交集运算(Intersect)和差集运算&a…...

java-springmvc 01

springmvc也是在spring framework中的,不是一个单独的项目 MVC就是和Tomcat有关。 01.MVC启动的第一步,启动Tomcat(这个和springboot的run方法启动Tomcat有关) 02.SpringMVC中,最为核心的就是DispatcherServlet&…...

SecuPress Pro 专业级WordPress网站安全防护插件优化版

下载地址:SecuPress Pro 专业版.zip SecuPress Pro:专业的WordPress安全解决方案 如果您没有时间进行每周扫描,SecuPress Pro将是您的理想选择。SecuPress Pro提供了所有SecuPress Free的功能,同时还增加了一些高级选项&#xff…...

linux 查看nginx日志

在 Linux 系统中,查看 Nginx 日志通常涉及以下几个步骤: 确定日志文件位置:Nginx 的日志文件通常位于 /etc/nginx/logs 或 /var/log/nginx。具体位置取决于您在安装 Nginx 时的配置。 查看访问日志:Nginx 的访问日志默认命名为 a…...

iOS - 多线程-GCD-队列组

文章目录 iOS - 多线程-GCD-队列组1. 队列组1.1 基本使用步骤 iOS - 多线程-GCD-队列组 开发过程中,有时候想实现这样的效果 多个任务并发执行所有任务执行完成后,进行下一步处理(比如回到主线程刷新UI) 1. 队列组 可以使用GC…...

1052. 【NOIP2016备赛】方阵操作(square)

1052. 【NOIP2016备赛】方阵操作(square) (Input: square.in, Output: square.out) 时间限制: 1 s 空间限制: 256 MB 题目描述 小 Z 给你一个 n n 的方阵,要求你完成 Q 次操作: 1. 1 i j k,将 ai,j 修改为 k。 2. 2 i j,交…...

Python打怪升级(4)

在计算机领域常常有说"合法"和"非法"指的是:是否合理,是否有效,并不是指触犯了法律。 random.randint(begin,end) 详细讲解一下这个random是指模板,也就是别人写好的代码直接来用,在Python当中,…...

2024年【危险化学品生产单位安全生产管理人员】考试题库及危险化学品生产单位安全生产管理人员考试报名

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员考试题库参考答案及危险化学品生产单位安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及危险化学品生产单位安全生产管理人员操作证已考过的学员汇总,…...

动态IP与静态IP的区别,你选对了吗?

在互联网世界中,IP地址是每台设备在网络上的唯一标识。这些地址可以是动态的,也可以是静态的。对于非专业人士来说,理解这两者之间的区别可能会有些困难。本文旨在深入探讨动态IP和静态IP的主要差异,帮助读者根据自己的需求做出明…...

jasypt组件死锁bug案例分享

事故描述 1、上午9.55发布了一个Apollo动态配置参数; 2、片刻后,服务器接口开始出现大量的超时告警,似乎是某资源被耗尽不足分配; 3、正值业务请求高峰的上午十点(平台上午10点会有一些活动会拉一波用户流量&#x…...

golang上传文件到ftp服务器

之前有个业务需要把文件上传到ftp服务器,写了一个上传ftp的功能 package ftpimport "context"type Client interface {// UploadFile 上传文件UploadFile(ctx context.Context, opt *UploadFileOpt) error }type UploadFileOpt struct {Data […...

数据治理和数据管理 傻傻分不清楚?

互联网时代,数据,这一无形资产,已成为现代企业的核心竞争力。如何高效地管理和利用数据,成为企业关注的焦点。在这个过程中,数据治理(Data Governance)和数据管理(Data Management&a…...

linux磁盘原理

在linux系统中,对磁盘进行管理与windows系统类似,都要先分区,格式化,创建文件系统,挂载目录,数据写入...

react 使用WEB3.0控件开发包 V3.0接入海康威视摄像头

1、下载官方安装包: 2、安装官方插件 3、引入文件 在public/index 中引入监控依赖,这三个文件可以在下载的官方demo中找到 4、react 中使用 useEffect(() > { const ipInfo :[192.168.xxxx];//初始化摄像头const WebVideoCtrl window.WebVideoCtrl…...

数据可视化———Tableau

基本认识: 维度:定性—字符串文本,日期和日期时间等等 度量:定量—连续值,一般属于数值 数据类型: 数值 日期/日期时间 字符串 布尔值 地理值 运算符 算数运算符:加减乘除,%取余,…...

【黑马头条】-day12项目部署和发布-jenkins

文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…...

学习操作系统路线

操作系统 简介 本课程为计算机专业学生量身定制,补足计算机操作系统相关知识,查漏补缺,也可用于考研复习。内容包括:操作统概述、进程管理、内存管理、文件管理、输入/输出管理等章节。内容力求精炼、重点突出、条理清晰、深入浅…...

uniapp微信小程序(商城项目)

最近,闲来无事,打算学一下uniapp小程序 于是在跟着某站上学着做了一个小程序,主要是为了学uniapp和vue。某站黑马优购 完成的功能主要有:首页、搜索、分类和购物车。 有人问了为什么没有登录、和添加订单呢?问的很好…...

Linux的自动化脚本:使用crul命令下载文件,实现断点续传

目录 一、要求 二、解决思路 (一)curl工具可以进行文件传输,可以实现手动断点续传 1、使用 --range 选项: 2. 使用 --continue-at 选项: (二)编写shell脚本调用curl命令,实现自…...

Golang | Leetcode Golang题解之第46题全排列

题目: 题解: func permute(nums []int) [][]int {var (n len(nums)dfs func(vals []int) // 已选择数 排列为vals 后续回溯继续选择 直至选完ans [][]int)dfs func(vals []int) {//边界if len(vals) n {ans append(ans, vals)}//转移 枚举选哪个f…...

MySQL数据表记录删操作

删除操作 作用删除表里的记录行(都是整行整行的删除的) 1.单表的删除 语法: delete from 表名 where 要删除的记录筛选条件; 案例:删除员工编号大于203的员工信息 delete from employees where employee_id>203; 2.多表…...

Python浅谈清朝秋海棠叶版图

1、清朝疆域概述: 清朝是我国最后一个封建王朝,其始于1616年建州女真部努尔哈赤建立后金,此后统一女真各部、东北地区。后又降服漠南蒙古,1644年入关打败农民起义军、灭南明,削三藩,复台湾。后又收外蒙&am…...

Linux之线程管理

目录 第1关:创建线程 任务描述 相关知识 使用pthread_create函数创建线程 编程要求 答案: 第2关:线程挂起 任务描述 相关知识 使用pthread_join挂起线程 编程要求 答案: 第3关:线程终止 任务描述 相关知识 使用pthread…...

.net反射(Reflection)

文章目录 一.概念:二.反射的作用:三.代码案例:四.运行结果: 一.概念: .NET 反射(Reflection)是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射,你可…...

白平衡简介

文章目录 白平衡的概念白平衡的调节常见的白平衡模式 白平衡的概念 白平衡是指摄影、摄像和显示技术中的一项重要概念,用于调节图像中的白色或中性灰色的色彩,使其看起来在不同光源条件下都是准确的白色或灰色。白平衡的主要目的是确保图像的色彩准确性…...

centos7.9下安装SVN服务

一、安装subversion yum install -y subversion #安装svn mkdir -p /data/svnrepos/java #自定义svn仓库位置/data/svnrepos,自定义一个项目叫svn(这里新建目录) svnadmin create /data/svnrepos/java #创建一…...

iStat Menus for Mac:强大的系统监控工具

iStat Menus for Mac是一款功能强大的系统监控工具,专为Mac用户设计,旨在帮助用户全面了解电脑的运行状态,提高电脑的性能和稳定性。 iStat Menus for Mac v6.73 (1239)中文版下载 该软件可以实时监测CPU使用率、内存占用、网络速度、硬盘活动…...

NumPy 1.26 中文官方指南(四)

附加文件 术语表 原文:numpy.org/doc/1.26/glossary.html (n,) 括号中跟着逗号的数字表示一个具有一个元素的元组。尾随逗号将一个元素元组与括号n区分开。 -1 在维度入口中,指示 NumPy 选择长度,以保持数组元素总数不变。 >>> n…...

Python flask

Flask 是一个用 Python 编写的轻量级 Web 应用框架。它被设计为易于使用和扩展,使其成为构建简单网站到复杂的、动态的 web 应用程序的理想选择。以下是 Flask 的一些基本组件和概念: 主要组件 Flask:框架本身,提供基本的功能来处…...

2-token生成

Token是密码学中的一个概念,可以用作身份验证凭证。在计算机领域中,token可以是一个字符串,用于标识用户的身份和权限。当用户进行身份验证时,他们通常会收到一个token,以便在将来的请求中用作凭证。 在互联网应用程序…...

Flutter 上架如何解决 ITMS-91053 问题

最近,我的 Flutter App 发布到 TestFlight 后,就会收到一封邮件:The uploaded build for YOUR APP has one or more issues. 上面的邮件主要是说,我的 App 缺少了调用 API 的声明,以前从来没看到过,上网一查…...

【网络原理】IP协议详解

一.与IP协议相关的基本概念 IP协议,即网际互连协议(Internet Protocol),是TCP/IP体系中的核心网络层协议。 网络层IP协议解决的问题 数据传输的过程中,不是直接进行的传输,而是经过层层的封装和分用的过程才能到达对端. IP协议主…...

【智能算法应用】麻雀搜索算法求解非线性方程组问题

目录 1.算法原理2.数学模型3.结果展示4.代码获取 1.算法原理 【智能算法】麻雀搜索算法(SSA)原理及实现 2.数学模型 非线性方程组为: 2 x 1 − x 2 e − x 1 − x 1 2 x 2 e − x 2 (1) \begin{aligned}&2x_1-x_2e^{-x_1}\\&-…...

libcity 笔记:支持的模型

1 支持的模型 1.1 traffic_state_pred HA历史平均值,将历史流量建模为季节性过程,然后使用前几个季节的加权平均值作为预测值。VAR向量自回归SVR支持向量回归ARIMAAutoEncoderSeq2Seq采用基于门控循环单元的编码器-解码器框架,进行多步预测…...

【HDFS】 双Buffer数据结构:EditsDoubleBuffer

缓冲(Buffer)机制是对数据持久化的延迟,以减少不必要的IO,从而提高数据落盘的效率。 一般需要使用双缓冲区的地方都是由于“生产者”和“消费者”供需不一致所造成的。 两个缓冲区可以交换,互相变成对方的角色。 HDFS引入双Buffer的背景及带来的收益 每次客户端的RPC请求…...

Java 笔记 15:Java 数组相关内容补充,多维数组,Arrays 类的常见用法,以及冒泡排序

一、前言 记录时间 [2024-05-05] 系列文章简摘: Java 笔记 01:Java 概述,MarkDown 常用语法整理 Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad / JDK 安装及环境配置,编写第一个 Java 程序 Java 笔记 …...

二.数据结构

单链表 数组实现单链表: int head; //head存储这个单链表的头结点 int value[N];//value存储结点的值 int nextt[N];//nextt存储结点的next指针 int id; //id表示当前用到的点的位置 //初始化: void Init(){head-1,id0;//链表的头节点要指向-1,当前结点位置为0 } //在…...

Redis系列之key过期策略介绍

为什么要有过期策略&#xff1f; Redis是一个内存型的数据库&#xff0c;数据是放在内存里的&#xff0c;但是内存也是有大小的&#xff0c;所以&#xff0c;需要配置redis占用的最大内存&#xff0c;主要通过maxmemory配置 maxmomory <bytes> # redis占用的最大内存官…...

Leetcode—1991. 找到数组的中间位置【简单】

2024每日刷题&#xff08;129&#xff09; Leetcode—1991. 找到数组的中间位置 实现代码 class Solution { public:int findMiddleIndex(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);int prefix 0;for(int i 0; i < nums.size();…...

Microsoft Edge使用心得与深度探索

Microsoft Edge是微软开发的一款网页浏览器&#xff0c;自从其基于Chromium内核的版本发布以来&#xff0c;它在性能、兼容性和功能上都有了显著提升&#xff0c;成为许多用户的新选择。以下是一些使用心得与深度探索的要点&#xff0c;希望能帮助你更好地利用Edge浏览器。 1. …...

【1】STM32·FreeRTOS·新建工程模板【一步到位】

目录 一、获取FreeRTOS源码 二、FreeRTOS源码简介 2.1、FreeRTOS源码文件内容 2.2、FreeRTOS内核 2.3、Source文件夹 2.4、portable文件夹 三、FreeRTOS手把手移植 3.1、FreeRTOS移植准备 3.2、FreeRTOS移植步骤 3.2.1、将 FreeRTOS 源码添加至基础工程、头文件路径等…...

从开发角度理解漏洞成因(02)

文章目录 文件上传类需求文件上传漏洞 文件下载类需求文件下载漏洞 扩展 留言板类&#xff08;XSS漏洞&#xff09;需求XSS漏洞 登录类需求cookie伪造漏洞万能密码登录 持续更新中… 文章中代码资源已上传资源&#xff0c;如需要打包好的请点击PHP开发漏洞环境&#xff08;SQL注…...

微积分 --- 偏导数,方向导数与梯度(二)

方向导数 上图为一温度图&#xff0c;所反映的是加利福利亚洲和内华达州在十月的一天下午三点的温度。其中&#xff0c;图中的每一点都是温度T关于x,y的函数&#xff0c;即T(x,y)。对于图中的Reno市而言&#xff0c;沿着x方向的偏导反映的是温度沿着x方向&#xff0c;即沿着东方…...