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

【深入理解Nginx】

深入理解Nginx

介绍

Nginx(发音为 “engine-x”)是一款高性能的HTTP服务器和反向代理服务器,同时支持IMAP/POP3协议。它以其高并发处理能力、稳定性、丰富的功能集、简单的配置和低资源消耗而受到广泛欢迎。Nginx特别适合提供静态文件服务、作为反向代理、负载均衡器和API网关。

特性

  • 高并发性能:能够处理大量的并发连接。
  • 模块化设计:灵活的模块系统允许根据需求编译不同的功能。
  • 反向代理和负载均衡:可以将请求分发到多个后端服务器,并能实现故障转移。
  • 静态文件服务:高效地提供静态文件,如图片、CSS、JavaScript等。
  • 动态内容处理:通过FastCGI、uWSGI、SCGI等协议与后端应用服务器交互。
  • SSL/TLS支持:提供HTTPS服务,支持SNI(Server Name Indication)。
  • 缓存:减少后端压力,提高响应速度。
  • 日志记录:详细记录访问和错误信息。
  • 易用性:配置简单,文档详尽。
  • 跨平台:适用于Linux, Unix, BSD, Mac OS X, Solaris, AIX等多种操作系统。

基本配置示例说明

以下是一个基本的Nginx配置文件,展示了如何设置一个简单的Web服务器来提供静态内容,并配置一个反向代理到后端应用服务器。

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;tcp_nopush      on;tcp_nodelay     on;keepalive_timeout  65;gzip  on;server {listen       80;server_name  example.com www.example.com;root   /usr/share/nginx/html;index  index.html index.htm;location / {try_files $uri $uri/ =404;}location /app/ {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page  404              /404.html;location = /404.html {internal;}error_page   500 502 503 504  /50x.html;location = /50x.html {internal;}}upstream backend_server {server 192.168.1.10:8080 weight=5;server 192.168.1.11:8080;server 192.168.1.12:8080 backup;}
}

高级配置示例说明

负载均衡策略

Nginx支持多种负载均衡算法,包括但不限于:

  • 轮询(Round Robin):默认算法,依次分配请求给每个后端服务器。
  • 权重(Weight):根据指定的权重值按比例分配请求。
  • 最少连接(Least Connections):将请求分配给当前连接数最少的服务器。
  • IP哈希(IP Hash):根据客户端的IP地址进行哈希运算,确保同一IP的请求总是被分配到同一台服务器。
upstream backend_servers {least_conn;  # 使用最少连接算法server 192.168.1.10:8080 weight=3;server 192.168.1.11:8080;server 192.168.1.12:8080 backup;
}

并发控制与限流

Nginx可以通过limit_req指令限制每秒请求数,防止过载。

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location /search/ {limit_req zone=one burst=5 nodelay;proxy_pass http://backend_servers;}}
}

在这个例子中,rate=1r/s表示每秒最多处理1个请求,burst=5允许突发情况下额外处理5个请求,nodelay参数使得这5个额外请求不会被延迟处理。

缓存

Nginx可以通过proxy_cache指令启用缓存。

http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;server {location /cached/ {proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_pass http://backend_servers;}}
}

反向代理

反向代理是Nginx的核心功能之一,用于将客户端请求转发给后端服务器,并将后端服务器的响应返回给客户端。

server {listen 80;server_name your_domain.com;location /app/ {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

安全设置

为了增强安全性,可以启用HTTPS,并配置HSTS(HTTP Strict Transport Security)、CSP(Content Security Policy)等安全头。

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";location / {proxy_pass http://backend_servers;}
}

跨域设置

跨域资源共享(CORS, Cross-Origin Resource Sharing)是一种机制,它允许或拒绝来自不同源的Web页面访问服务器资源。在配置Nginx时,可以通过添加特定的HTTP头来实现CORS的支持。

下面是一个基本的Nginx配置文件示例,展示了如何配置CORS。这个示例假设你的Nginx服务器运行在一个简单的环境中,并且你希望允许所有跨域请求:

server {listen 80;server_name yourdomain.com;location / {# 设置CORS相关的HTTP头add_header 'Access-Control-Allow-Origin' '*'; # 允许所有域名访问add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # 允许的HTTP方法add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization'; # 允许的HTTP头# 对于OPTIONS请求,通常用于CORS预检请求,返回204状态码if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000; # 预检请求结果缓存时间(秒)add_header 'Content-Type' 'text/plain charset=UTF-8';add_header 'Content-Length' 0;return 204;}# 你的其他配置,例如代理传递、静态文件服务等proxy_pass http://localhost:8080; # 示例:将请求代理到后端服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}# 其他location块和配置# ...
}
说明:
  1. add_header 'Access-Control-Allow-Origin' '*';

    • 允许所有域名访问资源。如果你只想允许特定的域名,可以将'*'替换为具体的域名,例如http://example.com
  2. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

    • 指定允许的HTTP方法。常用的方法包括GET、POST和OPTIONS(用于CORS预检请求)。
  3. add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization';

    • 指定允许的HTTP头。这里包含了常见的请求头,如Authorization,这在需要身份验证的情况下很有用。
  4. 处理OPTIONS请求

    • 对于CORS预检请求(通常使用OPTIONS方法),Nginx配置会返回204状态码,并设置一些额外的CORS头。Access-Control-Max-Age头指定了预检请求结果的缓存时间(以秒为单位)。
  5. proxy_pass和其他代理设置

    • 示例中展示了如何将请求代理到后端服务器(如运行在localhost:8080的Node.js应用)。这些设置通常用于反向代理配置。

集群配置

在生产环境中,通常会使用多个Nginx实例形成集群,以提高可用性和扩展性。集群可以通过以下几种方式实现:

  • 多台物理服务器:在不同的物理服务器上部署Nginx实例,通过DNS轮询或外部负载均衡设备分配流量。
  • 容器化部署:使用Docker或其他容器技术,在多个节点上运行Nginx容器,结合Kubernetes等容器编排工具管理集群。
  • 分布式存储:对于需要共享状态的服务(如缓存),可以使用分布式存储解决方案(如Redis、Memcached)来保持数据一致性。

总结

Nginx是一款强大且灵活的Web服务器和反向代理服务器,适用于各种规模的应用程序。它的高性能和低资源消耗使其成为处理高并发流量的理想选择。通过合理的配置,Nginx不仅可以作为静态文件服务器使用,还可以执行复杂的任务,如负载均衡、限流、缓存和安全强化。无论是小型网站还是大型互联网应用,Nginx都能提供稳定可靠的服务。随着对Nginx理解的加深,你可以利用其丰富的特性和模块来优化你的网络架构,提升系统的整体性能和安全性。

相关文章:

【深入理解Nginx】

深入理解Nginx 介绍 Nginx(发音为 “engine-x”)是一款高性能的HTTP服务器和反向代理服务器,同时支持IMAP/POP3协议。它以其高并发处理能力、稳定性、丰富的功能集、简单的配置和低资源消耗而受到广泛欢迎。Nginx特别适合提供静态文件服务、…...

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…...

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、Microi吾码表单引擎是什么?四、Microi吾码表单引擎功能4.1 模块引擎 - 由表单引擎驱动4.2 流程引擎 - 由表…...

css常用属性有哪些

在上篇文章我们知道了利用css选择器来对HTML进行简单装饰,就像做word文档一样,需要对哪一段落修改格式,就需要先选中,css选择器就是这意思。这格式如何修改,怎么放大字体,怎么加粗,怎么修改背景…...

Java设计模式 —— 【结构型模式】装饰者模式详解

文章目录 前言结构说明案例演示小结静态代理和装饰者的区别 前言 在日常生活中,我们常会遇到一种场景:去快餐店吃饭,里面琳琅满目的主食,还有各式各样的配菜作为消费者,只管挑选就行,但是如果让我们来设计…...

简道云与金蝶云星空无缝集成的技术探索

简道云数据集成到金蝶云星空的技术案例分享 在企业信息化建设中,数据的高效流动和准确对接是关键环节。本文将聚焦于一个实际运行的系统对接集成案例:简道云-其他入库单--->金蝶-其他入库单,通过轻易云数据集成平台实现这一目标。 案例背…...

单片机原理及应用笔记:单片机中断系统原理与项目实践

高金鹏:男,银川科技学院计算机与人工智能学院,2022级别计算机科学与技术本科生,单片机原理及应用课程第六组。 指导教师:王兴泽 电子邮件:高金鹏3535558665qq.com 个人CSDN:暴躁的海绵宝宝 暴躁的海绵宝…...

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本:4.36 问题介绍: 我的项目是公司的项目,需要在H5端使用百度地图,使用vue-cli创建的uniapp,就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…...

CTFHub ssrf

第一关(内网访问) 尝试访问位于127.0.0.1的flag.php吧 第二关(伪协议读取文件) 尝试去读取一下Web目录下的flag.php吧 1.首先尝试http://127.0.0.1/flag.php 2.查看页面源代码 3.根据提示输入file:///var/www/html/flag.php 4.查看页面源代码 第三关&…...

字符串哈希

1. LC 3292 形成目标字符串需要的最少字符串数Ⅱ 这题在3291的基础上开大数据量了。 3291我是比较标准的dp字典树优化匹配。先把所有word扔到字典树里面,定义dp[i]表示到target[i]需要的最少次数。对于每个i进行target子串的最长前缀匹配,随后向后刷表…...

ensp 静态路由配置

A公司有广州总部、重庆分部和深圳分部3个办公地点,各分部与总部之间使用路由器互联。广州、重庆、深圳的路由器分别为R1、R2、R3,为路由器配置静态路由,使所有计算机能够互相访问,实训拓扑图如图所示 绘制拓扑图 给pc机配置ip地址…...

Android Room 数据库使用详解

一、Room介绍 Android Room 是 Google 提供的一个 Android 数据持久化库,是 Android Jetpack 组成部分之一。它提供了一个抽象层,使得 SQLite 数据库的使用更为便捷。通过 Room,开发者可以轻松地操作数据库,不需要直接编写繁琐的…...

Ubuntu安装或卸载mariadb-server软件包

1、安装mariadb-server sudo apt install mariadb-server 检查MariaDB服务器的服务状态 service mariadb status 仅需要卸载MariaDB,而不是删除所有MariaDB相关软件包 sudo apt-get remove mariadb-server 2、卸载MariaDB 从系统中完全删除MariaDB数据库&#xf…...

canal详解及demo

提示:如何保证Redis中的数据与数据库中的数据一致性?数据同步canal的介绍和demo、大型企业如何实现mysql到redis的同步?使用binlog实时更新redis缓存、canal的接入教程、win下canal的服务器端、canal客户端的创建、连接、测试教程、数据同步方…...

SQL语句

SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系数据库系统的标准编程语言。它允许用户执行数据的定义、查询、更新和管理等操作。以下是一些常见的SQL语句及其简要说明: 数据定义语言(DDL&#…...

中间件 redis安装

redis官网地址:Redis - The Real-time Data Platform 环境 CentOS Linux release 7.9.2009 (Core) java version "17.0.12" 2024-07-16 LTS 1、通过压缩包安装redis 1,远程下载redis压缩包,或去官网下载:Downloads …...

设计模式12:抽象工厂模式

系列总链接:《大话设计模式》学习记录_net 大话设计-CSDN博客 参考: C设计模式:抽象工厂模式(风格切换案例)_c 抽象工厂-CSDN博客 1.概念 抽象工厂模式(Abstract Factory Pattern)是软件设计…...

学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式

学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式 参考文档: https://www.dmtf.org/standards/published_documents https://www.dmtf.org/dsp/DSP0222 https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.2.0.pdf参考代…...

基础库urllib的使用

学习爬虫,其基本的操作便是模拟浏览器向服务器发出请求,那么我们需要从哪个地方做起呢?请求需要我们自己构造吗?我们需要关心请求这个数据结构怎么实现吗?需要了解 HTTP、TCP、IP层的网络传输通信吗?需要知道服务器如何响应以及响应的原理吗? 可能…...

SSM 电脑配件销售系统设计要点与 JSP 实现难点攻克

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于电脑配件销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了电脑配件销售系统,它彻底改变了过…...

AI前沿分析:ChatGPT搜索上线,Google搜索地位能否守住?

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 引言:AI与搜索领域的激烈博弈一、ChatGPT搜索的优势是什么?1. 实时信息获取:超越传统搜索2. 对话式搜索:重构用户体验3. 个性化推荐:深度挖掘用户需求二、G…...

单片机:实现utf-8转gb2312(附带源码)

单片机实现UTF-8转GB2312 在嵌入式系统中,字符编码是常见的问题之一,尤其是在显示中文字符时。UTF-8和GB2312都是常见的字符编码标准,UTF-8广泛用于Web和现代操作系统中,而GB2312是中国大陆常用的中文字符集。在一些嵌入式系统中…...

VMProtect:软件保护与安全的全面解决方案

在当今数字化时代,软件的安全性和保密性愈发重要。VMProtect 作为一款备受瞩目的软件保护工具,因其强大的功能和广泛的应用而成为开发者保护软件的首选方案。 VMProtect 是一款新一代的软件保护实用程序,支持多个编译器平台,包括…...

linux下观察进程捕获信号的情况

linux观察进程收到信号的情况,信号可以来自外部进程、进程自身、内核定时器等。 观察捕获信号方法一:strace strace所有信号: strace -e signal -f -p $pid 过滤出某个信号: #grep 信号名,取自kill -l strace -e …...

VSCode编辑+GCC for ARM交叉编译工具链+CMake构建+OpenOCD调试(基于STM32的标准库/HAL库)

一、CMake安装 进入CMake官网的下载地址Get the Software,根据系统安装对应的Binary distributions。 或者在CMake——国内镜像获取二进制镜像安装包。 或者访问GitHub的xPack项目xPack CMake v3.28.6-1,下载即可。 记得添加用户/系统的环境变量&#…...

概率论得学习和整理26:EXCEL 关于plot 折线图--频度折线图的一些细节

目录 0 折线图有很多 1 频度折线图 1.1 直接用原始数据做的频度折线图 2 将原始数据生成数据透视表 3 这样可以做出了,频度plot 4 做按某字段汇总,成为累计plot分布 5 修改上面显示效果,做成百分比累计plot频度分布 0 折线图有很多 这…...

数据结构之栈和队列算法题

一&#xff1a;有效括号数 学了栈之后这一题就比较简单了。 思路&#xff1a;1、左括号进栈 2、右括号出栈匹配。 完整代码&#xff1a; 因为使用C语言写的&#xff0c;所以里面包含了栈的实现 #include<stdio.h> #include<stdlib.h> #include<assert.h>…...

离散数学---随机漫步

本文根据 MIT 计算机科学离散数学课程整理&#xff08;Lecture 25&#xff09;。 赌徒破产问题&#xff08;Gamblers Ruin&#xff09; 问题描述 初始为 n 元&#xff0c;对于每一次独立的赌注&#xff0c;都有 p 的概率赢得 1 元&#xff0c;(1-p) 的概率输掉 1 元。当输完…...

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…...

java开发入门学习一 -基本概念入门

目录 Java的开发环境搭建 开发环境简单认识 开发环境下载与安装 初始JAVA之helloWorld java基本运行原理 helloWord实例 JAVA文档注释和API 文档 注释 API文档地址 Java的优缺点 优点 缺点 JVM的简单介绍 功能 1. 实现JAVA程序的跨平台性 2. 自动内存管理(管理…...

Coturn 实战指南:WebRTC 中的 NAT 穿透利器

1. 什么是 Coturn&#xff1f; Coturn 是一种开源的 TURN(Traversal Using Relays around NAT)服务器&#xff0c;用于解决 NAT 穿透问题。它帮助客户端在受限网络环境(例如防火墙或 NAT 后面)中实现双向通信&#xff0c;常用于 WebRTC 应用、VoIP、在线游戏等场景。 2. Cotur…...

【每日一练 基础题】[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 暴力破解会超时,用因式分解的平方差公式 a2 2abb2(a)2 a-2abb2(a-b)2 输出整数((a1a2a3…an)-a1-a2-a3-…-an)/2 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);l…...

华为ensp--BGP路径选择-Preferred Value

学习新思想&#xff0c;争做新青年。今天学习的是BGP路径选择-Preferred Value 实验目的 理解BGP路由信息首选值&#xff08;Preferred Value&#xff09;的作用 掌握修改Preferred Value属性的方法 掌握通过修改Preferred Value属性来实现流量分担的方法 实验拓扑 实验要求…...

Flink是什么?Flink技术介绍

官方参考资料&#xff1a;Apache Flink — Stateful Computations over Data Streams | Apache Flink Flink是一个分布式流处理和批处理计算框架&#xff0c;具有高性能、容错性和灵活性。以下是关于Flink技术的详细介绍&#xff1a; 一、Flink概述 ‌定义‌&#xff1a;Fli…...

Java中的重要集合

目录 List 1.vector 2.ArrayList 3.CopyonWriteArraylist 4.ArrayList变成线程安全的方式 5.LinkList Map 1.HashTable 2.HashMap 3.ConcurrentHashMap Set 1.LinkedHashSe List 1.vector Vector 是线程安全的动态数组&#xff0c;其内部方法基本都经过synchroni…...

实景视频与模型叠加融合?

[视频GIS系列]无人机视频与与实景模型进行实时融合_无人机视频融合-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞28次&#xff0c;收藏14次。将无人机视频与实景模型进行实时融合是一个涉及多个技术领域的复杂过程&#xff0c;主要包括无人机视频采集、实景模型构建、视频与模型…...

【一本通】分数约分

【一本通】分数约分 C语言CJavaPython &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 编写一个给一个分数约分的程序。 输入 输出整数a&#xff0c;b&#xff0c;分别表示分子与分母 输出 约分后的分子与分母&#xff0c;用“/“分隔 …...

ArkTs的容器布局

组件按照布局的要求依次排列&#xff0c;构成应用的页面。在声明式UI中&#xff0c;所有的页面都是由自定义组件构成&#xff0c;开发中可以根据自己的需求&#xff0c;选择合适的布局进行页面开发。 一. 如何选择布局 声明式UI提供了以下10种常见布局&#xff0c;开发者可根…...

jenkins 出现 Jenkins: 403 No valid crumb was included in the request

文章目录 前言解决方式:1.跨站请求为找保护勾选"代理兼容"2.全局变量或者节点上添加环境变量3.&#xff08;可选&#xff09;下载插件 the strict Crumb Issuer plugin4.重启 前言 jenkins运行时间长了&#xff0c;经常出现点了好几次才能构建&#xff0c;然后报了Je…...

SpringDataJpa-字段加解密存储

SpringDataJpa-字段加解密存储 背景场景实现类型转换器实体类修改 Crypto 注解AOP 目前可使用场景注意 背景 遇到一个需求&#xff0c;对数据库中的某些字段进行加密存储&#xff0c;但是在各个服务流转中&#xff0c;需要是解密状态的。框架使用的是JPA。 Spring 提供了 Attri…...

python03-保留字、标识符;变量、常量;数据类型、数据类型之间的转化

一、保留字 VS 标识符 1-1、35个保留字 保留字&#xff0c;严格区分大小写&#xff01; 查询保留字&#xff1a; 1-2、标识符 常量&#xff1a;python中没有明确的定义常量的关键字&#xff0c;常量的值在程序运行过程中不允许修改&#xff01; 二、变量 VS 常量 2-1、变量 变…...

投影互动装置入驻,科普基地学习体验再上新台阶!

数字科技的迅猛进步极大地充盈了人们的日常生活&#xff0c;这一变革在主题乐园与科普教育基地等场所尤为显著。在这些地方&#xff0c;投影互动装置引领我们穿梭于光影构建的奇妙世界。特别是互动投影墙&#xff0c;它赋予观众前所未有的交互体验。那么&#xff0c;这种技术究…...

socket编程UDP-实现滑动窗口机制与累积确认GBN

在下面博客中&#xff0c;我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程&#xff0c;并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接&#xff08;进阶篇&#xff09;_udp socket发送-CSDN博客 下面博客实现了停等机制。 socket编程UDP-实现停…...

乐观锁与悲观锁的概念

在多线程或多进程并发访问同一资源的情况下&#xff0c;为了防止数据的不一致性和竞态条件&#xff0c;常常需要使用锁机制来控制并发访问。锁机制大致可以分为 乐观锁&#xff08;Optimistic Locking&#xff09;和 悲观锁&#xff08;Pessimistic Locking&#xff09;。这两种…...

考研数学【线性代数基础box(数二)】

本文是对数学二线性代数基础进行总结&#xff0c;一些及极其简单的被省略了&#xff0c;代数的概念稀碎&#xff0c;不如高数关联性高&#xff0c;所以本文仅供参考&#xff0c;做题请从中筛选&#xff01; 本文为初稿&#xff0c;后面会根据刷题和自己的理解继续更新 高数&a…...

游戏引擎学习第45天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程&#xff0c;展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹&#xff0c;而另一版本是角色会完全停下来。这种方式感觉不太自然&#xff0c;因为在游戏中&#xff0c;…...

基于 mzt-biz-log 实现接口调用日志记录

&#x1f3af;导读&#xff1a;mzt-biz-log 是一个用于记录操作日志的通用组件&#xff0c;旨在追踪系统中“谁”在“何时”对“何事”执行了“何种操作”。该组件通过简单的注解配置&#xff0c;如 LogRecord&#xff0c;即可实现接口调用的日志记录&#xff0c;支持成功与失败…...

无人设备之RTK地面基站篇

一、定义与功能 RTK地面基站是一种通过差分定位技术来实现GPS等全球导航卫星系统信号精确定位的设备。它通过与无人设备上的流动站进行实时数据通信&#xff0c;利用载波相位差分原理&#xff0c;消除卫星定位过程中的大部分公共误差&#xff0c;如卫星轨道误差、电离层延迟、对…...

TMS320C55x DSP芯片结构和CPU外围电路

第2章 DSP芯片结构和CPU外围电路 文章目录 第2章 DSP芯片结构和CPU外围电路TMS320C55x处理器的特点TMS320c55x CPU单元指令缓冲(Instruction Buffer Unit) I单元程序流程(Program Flow Unit) P单元地址数据(Address-data Flow Unit) A单元数据计算(Data Computation Unit) D单元…...

【CC2530开发基础篇】继电器模块使用

一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开&#xff0c;深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件&#xff0c;广泛用于自动化系统中&#xff0c;用于控制大功率负载的开关操作。在本实验中&#xff0c;将通过GPIO口…...