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

深入解析 .NET Kestrel:高性能 Web 服务器的架构与最佳实践

Kestrel 是 .NET  中用于处理 HTTP 请求的高性能 Web 服务器。作为 ASP.NET Core 的默认服务器,Kestrel 被设计为在高并发、高吞吐量的环境下表现优异,并且能够支持多种协议和跨平台操作。本文将深入探讨 Kestrel 的架构设计、工作原理、配置方式、性能优化以及其在生产环境中的最佳实践。

1. Kestrel 简介

Kestrel 是一个轻量级的 Web 服务器,基于事件驱动和异步 I/O 模型,专为 .NET 环境中的 Web 应用程序设计。它可以独立运行,也能与其他 Web 服务器(如 Nginx 或 IIS)协作,共同为 Web 应用提供高效的请求处理能力。

与传统的 Web 服务器(如 Apache 或 Nginx)相比,Kestrel 在处理大量并发请求和实现低延迟方面展现出色性能。它的主要特点包括:

  • 异步 I/O 处理:Kestrel 使用异步编程模型,能高效处理大规模并发请求。

  • 高吞吐量与低延迟:优化了请求的吞吐量,支持高并发连接且响应迅速。

  • 跨平台支持:Kestrel 能在 Windows、Linux 和 macOS 上运行,是 .NET Core 和 .NET 8 应用程序的默认 Web 服务器。

  • 协议支持:除了传统的 HTTP/1.x 协议外,Kestrel 还支持 HTTP/2 和 HTTP/3 等现代协议。

为什么选择 Kestrel?

作为 .NET 生态系统的核心组件,Kestrel 是处理 HTTP 请求的首选服务器。其设计理念注重性能、可扩展性和跨平台特性,使得 Kestrel 成为现代 Web 应用架构中不可或缺的组成部分。

Kestrel 在以下几种情况下特别适用:

  • 高并发请求处理:在高负载、高流量场景下,Kestrel 能通过其异步模型和高效的内存管理表现出色。

  • 跨平台 Web 应用:无论是 Windows 还是 Linux,Kestrel 都能轻松运行,这使得它成为跨平台 Web 应用的理想选择。

  • 简化的部署架构:Kestrel 作为自带的 Web 服务器,简化了部署,尤其是在没有反向代理的场景下。


2. Kestrel 架构设计与工作原理

2.1 异步事件驱动模型

Kestrel 是基于异步编程和事件驱动架构设计的,能够最大限度地提高处理能力并减少内存占用。Kestrel 通过 IOCP(I/O Completion Ports) 模型和 异步 I/O 机制,避免了阻塞操作,从而提高了对大量并发请求的处理能力。

在处理每个请求时,Kestrel 会为每个请求创建一个任务,并将其交给线程池进行异步处理。这样,Kestrel 就能同时处理成千上万的请求,而不会因为线程阻塞而导致性能瓶颈。

2.2 请求生命周期与管道

Kestrel 的请求处理流程是基于管道的,它将每个请求的各个阶段抽象为管道中的一个步骤。管道模型使得请求的处理变得非常灵活,允许开发者为请求设置多个处理环节,包括:

  • 请求接收:Kestrel 从客户端接收 HTTP 请求并解码。

  • 请求处理:将请求传递给 ASP.NET Core 应用程序进行处理。

  • 响应发送:将响应数据发送回客户端。

这种设计不仅提高了可维护性,还允许开发者在请求处理流程中插入自定义逻辑,如身份验证、缓存等。


3. Kestrel 配置:灵活性与定制化

Kestrel 提供了丰富的配置选项,允许开发者根据应用的需求来精细控制其行为。在 .NET 8 中,Kestrel 的配置更加灵活,允许开发者根据不同场景进行性能优化和安全设置。

3.1 配置 Kestrel 的基本设置

Kestrel 的配置通常在 Program.cs 文件中完成。以下是一个简单的 Kestrel 配置示例:

public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseKestrel(options =>{// 配置最大并发连接数options.Limits.MaxConcurrentConnections = 1000;// 配置最大请求体大小options.Limits.MaxRequestBodySize = 10 * 1024;  // 10 KB// 配置 Kestrel 监听端口options.ListenAnyIP(5000);  // 默认监听端口});webBuilder.UseStartup<Startup>();});
}

3.2 配置 HTTPS 和 SSL/TLS

为了确保数据传输的安全性,Kestrel 可以配置为支持 HTTPS。在配置 HTTPS 时,开发者需要提供 SSL/TLS 证书,可以使用如下方法来启用 HTTPS:

options.Listen(IPAddress.Any, 5001, listenOptions =>
{listenOptions.UseHttps("path-to-certificate.pfx", "certificate-password");
});

该配置告诉 Kestrel 在 5001 端口上启用 HTTPS,并使用指定的 SSL 证书进行加密通信。

3.3 支持 HTTP/2 和 HTTP/3

Kestrel 在默认情况下支持 HTTP/1.x 和 HTTP/2 协议,而在 .NET 8 中,它也逐渐加入对 HTTP/3 和 QUIC 的支持,进一步提高 Web 应用的性能。

在 Kestrel 中启用 HTTP/2 和 HTTP/3 可以通过如下方式配置:

options.ListenAnyIP(5000, listenOptions =>
{listenOptions.Protocols = HttpProtocols.Http1AndHttp2;  // 启用 HTTP/1 和 HTTP/2
});options.ListenAnyIP(5001, listenOptions =>
{listenOptions.Protocols = HttpProtocols.Http3;  // 启用 HTTP/3
});

通过配置 HTTP/3,Kestrel 能够利用 QUIC 协议带来的更低延迟和更高效率,特别是在不稳定的网络环境下。


4. 性能优化与请求限制

Kestrel 提供了一系列配置选项,用于控制性能和请求的限制。通过合理配置这些限制,可以确保 Web 服务器在高负载环境下高效运行。

4.1 配置请求限制

Kestrel 提供了以下常见的请求限制配置项:

  • MaxRequestBodySize:限制请求体的最大大小。

  • MaxRequestHeaderSize:限制请求头的最大大小。

  • MaxConcurrentConnections:限制最大并发连接数。

  • KeepAliveTimeout:配置连接保持活动的最大时间。

这些设置帮助开发者避免恶意请求过载和资源耗尽。

options.Limits.MaxRequestBodySize = 10 * 1024 * 1024;  // 最大请求体 10MB
options.Limits.MaxRequestHeaderSize = 16 * 1024;        // 最大请求头 16KB
options.Limits.MaxConcurrentConnections = 1000;          // 最大并发连接数 1000

4.2 并发连接与线程池

Kestrel 的并发性能是通过异步 I/O 模型和线程池来实现的。配置合理的线程池大小和并发连接数对于高负载的 Web 应用至关重要。合理的线程池配置可以避免线程争用和性能瓶颈。

在高并发场景中,可以通过设置 MaxConcurrentConnections 和其他资源限制来确保 Kestrel 能够以最优性能处理请求。


5. Kestrel 与反向代理

在生产环境中,Kestrel 通常与反向代理(如 Nginx、Apache 或 IIS)一起使用,反向代理处理 SSL 终结、负载均衡和其他中间件功能,而 Kestrel 负责处理实际的 HTTP 请求。

反向代理的常见配置流程如下:

  1. 配置 Kestrel 监听特定端口。

  2. 配置反向代理将流量转发到 Kestrel。

  3. 配置 ForwardedHeaders 中间件,以确保 Kestrel 正确解析来自反向代理的请求头。

public void Configure(IApplicationBuilder app)
{app.UseForwardedHeaders();  // 处理反向代理头信息app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});
}

使用反向代理时,确保 Kestrel 正确处理转发的头信息(如客户端 IP、协议等),这是保持应用安全性和准确性的关键。


6. 总结

Kestrel 是 .NET  中一个至关重要的组件,它通过高性能、异步 I/O、事件驱动架构以及支持现代协议(如 HTTP/2 和 HTTP/3),成为了构建高并发 Web 应用的理想选择。其灵活的配置选项使得开发者能够根据需求对其进行优化,以满足从小型应用到大型分布式系统的各种需求。

Kestrel 的性能和可扩展性使其在处理高并发、高吞吐量请求时能够发挥最大的优势,而与反向代理的结合更是使其在生产环境中更加安全和可靠。通过合理配置请求限制、并发连接和协议支持,开发者可以确保 Web 应用在各类场景下的高效运行。

相关文章:

深入解析 .NET Kestrel:高性能 Web 服务器的架构与最佳实践

Kestrel 是 .NET 中用于处理 HTTP 请求的高性能 Web 服务器。作为 ASP.NET Core 的默认服务器&#xff0c;Kestrel 被设计为在高并发、高吞吐量的环境下表现优异&#xff0c;并且能够支持多种协议和跨平台操作。本文将深入探讨 Kestrel 的架构设计、工作原理、配置方式、性能优…...

ZYNQ 纯PL端逻辑资源程序固化流程

ZYNQ 纯PL端逻辑资源程序固化 ZYNQ的程序固化流程比传统的FPGA固化流程复杂很多&#xff0c;Vivado生成的bit文件无法直接固化在ZYNQ芯片中。因为ZYNQ 非易失性存储器的引脚&#xff08;如 SD 卡、QSPI Flash&#xff09;是 ZYNQ PS 部分的专用引脚。这些非易失性存储器由 PS …...

【树莓派Pico FreeRTOS】-FreeRTOS-SMP移植

FreeRTOS-SMP移植 文章目录 FreeRTOS-SMP移植1、Raspberry Pi Pico SDK准备2、下载最新FreeRTOS-Kernel源码3、Raspberry Pi Pico的开发环境搭建4、编译配置5、FreeRTOSConfig.h文件设置6、演示代码RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 …...

数字智慧方案5961丨智慧能源与运维云平台解决方案(52页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读&#xff1a;智慧能源与运维云平台解决方案 在当今数字化时代&#xff0c;能源管理与设备运维的智能化、高效化成为企业发展的关键。智慧能源与运维云平台解决方案应运而生&#xff0c;为企业提供了全面且先进的能源管理和运维手段…...

2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析

完整内容请看文章最下面的推广群 数据整理与分析 表1&#xff1a;有源配电网62节点系统负荷参数 内容&#xff1a;列出了62个节点的有功负荷&#xff08;单位&#xff1a;kW&#xff09;。 特点&#xff1a; 负荷范围&#xff1a;24 kW&#xff08;节点19&#xff09;到420 …...

腾讯云BI VS quickbi 企业选型(从企业实际功能使用和费用对比)

腾讯云BI VS quickbi 选型 一、总结 前段时间领导让调研腾讯云BI&#xff0c;用来做BI选型&#xff0c;现根据公司实际使用功能做如下总结。 建议继续使用quickbi&#xff0c;不选择腾讯云BI 原因&#xff1a; 腾讯云BI专业版&#xff0c;官方价格最低101996元。并且只能选…...

WebDeveloper 流量分析、sudo提权,靶场通关WP

一、信息收集 1、主机探测 arp-scan -l netdiscover -i eth0 -r 192.168.33.0/24 nmap -sP 192.168.66.0/24 2、端口扫描 nmap -sS -sV 192.168.66.141 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) 80/tcp op…...

编写教育网站后端页面笔记

callbacktitle.html 对应表: 对应的功能: 控制器层数据: 页面没有写内容 chapter.html 对应表: questionbank ,intofloortime,questionBank,title,didtitles,option,answer,analyse 对应的功能:问题反馈页面 控制器层数据(控制器类): ChapterQuestionbankTitle c…...

C++漫溯键值的长河:map set

文章目录 1.关联式容器2.set2.1 find2.2 lower_bound、upper_bound 3.multiset3.1 count3.2 equal_range 4.map4.1 insert4.2 operate->4.3 operate[ ]4.4 map的应用实践&#xff1a;随机链表的复制 5.multimap希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动…...

西门子数字化研发设计制造一体化规划案例P87(87页PPT)(文末有下载方式)

资料解读&#xff1a;《西门子数字化研发设计制造一体化规划案例》 详细资料请看本解读文章的最后内容。 该文档围绕西门子为企业打造的智能化制造研发工艺生产一体化平台规划方案展开&#xff0c;全面阐述了从业务现状分析到项目实施及案例分享的整个过程。 业务现状与需求分析…...

Rust多线程性能优化:打破Arc+锁的瓶颈,效率提升10倍

一、引言 在 Rust 开发中&#xff0c;多线程编程是提升程序性能的重要手段。Arc&#xff08;原子引用计数&#xff09;和锁的组合是实现多线程数据共享的常见方式。然而&#xff0c;很多程序员在使用 Arc 和锁时会遇到性能瓶颈&#xff0c;导致程序运行效率低下。本文将深入剖…...

基于python的人工智能应用简述

基于Python的人工智能应用简述 Python已成为人工智能(AI)开发的首选语言,凭借其简洁性、丰富的库生态系统和强大的社区支持,广泛应用于各类AI应用场景。以下是Python在人工智能领域的主要应用领域和技术实现。 1. 机器学习(Machine Learning) Python通过Scikit-learn、Ten…...

《Android 应用开发基础教程》——第十章:使用 Gson 实现网络 JSON 数据解析与对象映射

目录 第十章&#xff1a;使用 Gson 实现网络 JSON 数据解析与对象映射 &#x1f539; 10.1 什么是 Gson&#xff1f; &#x1f538; 10.2 添加依赖 &#x1f538; 10.3 基础使用 ✦ 示例 JSON 字符串&#xff1a; ✦ 定义对应的 Java 类&#xff1a; ✦ JSON ➜ 对象&am…...

【Android】四大组件之BroadcastReceiver

目录 一、什么是BroadcastReceiver 二、创建和使用BroadcastReceiver 三、跨应用广播接收权限 四、广播方式 五、广播类型与特性 六、BroadcasReceiver注册方式 七、BroadcasReceiver工作流程 你可以把广播接收器想象成一个“收音机”。它的作用是监听系统或应用发出的“…...

[UVM]寄存器模型的镜像值和期望值定义是什么?他们会保持一致吗?

寄存器模型的镜像值和期望值定义是什么&#xff1f;他们会保持一致吗&#xff1f; 摘要&#xff1a;在 UVM (Universal Verification Methodology) 寄存器模型中&#xff0c;镜像值 (mirrored value) 和期望值 (desired value) 是两个非常重要的概念&#xff0c;用于管理寄存器…...

OpenGL-ES 学习(12) ---- VBO EBO VAO

目录 VBO 定义VBO 创建统一VertexData使用 VBO 绘制VAO VBO 定义 VBO(Vertex Buffer Object) 是指顶点缓冲区对象&#xff0c;而 EBO(Element Buffer Object)是指图元索引缓冲区对象&#xff0c;VBO 和 EBO实际上是同一类 buffer 按照用途的不同称呼 OpenGL-ES2.0 编程中&…...

【Redis分布式】主从复制

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【中间件】企业级中间件剖析 一、主从复制 在分布式系统之中为了解决单点问题&#xff08;1、可用性问题&#xff0c;该机器挂掉服务会停止2、性能支持的并发量是有限的&#xff09;通常会把数据复制多…...

Node.js心得笔记

npm init 可用npm 来调试node项目 浏览器中的顶级对象时window <ref *1> Object [global] { global: [Circular *1], clearImmediate: [Function: clearImmediate], setImmediate: [Function: setImmediate] { [Symbol(nodejs.util.promisify.custom)]: [Getter] }, cl…...

多智能体空域协同中的伦理博弈与系统调停

在多智能体系统&#xff08;MAS&#xff09;广泛应用于低空飞行调度、应急响应与城市管理的背景下&#xff0c;AI之间的“协同”不仅是算法效率问题&#xff0c;更是伦理角色之间的权责动态博弈。尤其在高频互动、任务冲突、资源抢占等复杂场景中&#xff0c;智能体不再是“工具…...

面试中系统化地解答系统设计题:通用方法论

目录 一、明确需求(Clarify Requirements) (一)理解业务背景 (二)功能性需求(Functional Requirements) 1. 分析目标 2. 功能需求分类 A. 用户交互类功能 B. 数据处理类功能 C. 管理与运维类功能 D. 外部系统交互类功能 示例场景详解 3. 捕捉隐藏需求的技巧…...

kotlin中 热流 vs 冷流 的本质区别

&#x1f525; 冷流&#xff08;Cold Flow&#xff09; vs 热流&#xff08;Hot Flow&#xff09;区别 特性冷流&#xff08;Cold Flow&#xff09;热流&#xff08;Hot Flow&#xff09;数据生产时机每次 collect 才开始执行启动时就开始生产、始终运行生命周期与 collect 者…...

机器视觉开发-打开摄像头

以下是使用Python和OpenCV打开摄像头的最简单实现&#xff1a; import cv2# 打开默认摄像头&#xff08;通常是0&#xff09; cap cv2.VideoCapture(0)# 检查摄像头是否成功打开 if not cap.isOpened():print("无法打开摄像头")exit()print("摄像头已打开 - 按…...

Rerank详解

疑惑一 我对rag的流程理解是。后端首先建立embedding后的向量数据库&#xff0c;用户提问使用相同的embedding模型进行向量化&#xff0c;使用阈值控制相似度找出前topk个数据。然后rerank&#xff0c;将rerank的结果打包成prompt返回给大模型进行解答。我对于rerank的过程不是…...

深度探索DeepSeek:从架构设计到性能优化的实战指南

深度解码DeepSeek&#xff1a;从架构设计到工业级部署的全链路优化实践 引言&#xff1a;大模型时代的工程挑战 在人工智能技术进入工业化落地阶段的今天&#xff0c;大模型训练与推理的工程化能力已成为衡量企业技术实力的重要标尺。DeepSeek作为当前业界领先的超大规模语言…...

d202551

目录 一、175. 组合两个表 - 力扣&#xff08;LeetCode&#xff09; 二、511. 游戏玩法分析 I - 力扣&#xff08;LeetCode&#xff09; 三、1204. 最后一个能进入巴士的人 - 力扣&#xff08;LeetCode&#xff09; 一、175. 组合两个表 - 力扣&#xff08;LeetCode&#xf…...

(C题|社交媒体平台用户分析问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...

计网_PPP协议

2024.10.15&#xff1a;beokayy计算机网络学习笔记 PPP协议 PPP协议的特点PPP协议应满足的需求&#xff08;了解&#xff09;PPP协议的组成&#xff08;PPP协议有三个组成部分&#xff09; PPP协议的帧格式PPP协议的工作状态 ISP指的是运营商&#xff0c;比如中国联通、中国电信…...

Mem0.ai研究团队开发的全新记忆架构系统“Mem0”正式发布

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

二叉树删除结点详细代码

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h>typedef int data_t; typedef struct _node {data_t data;struct _node* left;struct _node* right; }node_t;int bst_create(node_t**, data_t);//函数声明BST创建 int bst…...

PyTorch线性代数操作详解:点积、矩阵乘法、范数与轴求和

本文通过代码示例详细讲解PyTorch中常用的线性代数操作&#xff0c;包括点积、矩阵乘法、范数计算以及按轴求和等操作&#xff0c;帮助读者掌握张量运算的核心方法。 1. 点积运算 点积&#xff08;Dot Product&#xff09;是两个向量对应元素相乘后求和的结果。 实现代码&…...

Java SE(6)——类和对象

1.初始面向对象 1.1 什么是面向对象 Java是一门纯面向对象的编程语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交换来完成一件事情 1.2 面向过程…...

Kubernetes(k8s)的API Server 组件原理与结合生产实战教程

一、API Server 架构深度解析 1. 核心架构设计 二、生产环境安全加固实战 1. 认证&#xff08;Authentication&#xff09; 2. 授权&#xff08;Authorization&#xff09; 3. 准入控制&#xff08;Admission Control&#xff09; 三、性能优化与调参 1. 关键启动参数 四…...

Java面试高频问题(31-33)

三十一、服务网格&#xff1a;东西向流量治理与故障注入 服务网格架构分层 mermaid graph BT subgraph Control Plane APilot --> BEnvoy Sidecar CMixer --> B DCitadel --> B end subgraph Data Plane B --> E服务A B --> F服务B B --> G服务C end 核心能…...

VSCode开发调试Python入门实践(Windows10)

我的Windows10上的python环境是免安装直接解压的Python3.8.x老版本&#xff0c;可参见《Windows下Python3.8环境快速安装部署。 1. 安装VSCode 在Windows 10系统上安装Visual Studio Code&#xff08;VS Code&#xff09;是一个简单的过程&#xff0c;以下是详细的安装方法与…...

C++——入门基础(2)

文章目录 一、前言二、C入门2.1 缺省参数2.2 函数重载2.2.1 参数类型不同2.2.1.1 整体参数类型不同2.2.1.2 参数类型顺序不同 2.2.2 参数个数不同2.2.3 避坑注意2.2.3.1无参与有参2.2.3.2 返回值不同 2.3 引用2.3.1 引用的概念2.3.2引用的结构2.3.3 引用的特点2.3.4引用的作用2…...

【MySQL】复合查询与内外连接

目录 一、复合查询 1、基本查询回顾&#xff1a; 2、多表查询&#xff1a; 3、自连接&#xff1a; 4、子查询&#xff1a; 单列子查询 多行子查询&#xff1a; 多列子查询&#xff1a; 在from语句中使用子查询&#xff1a; 5、合并查询&#xff1a; union&#xff1…...

第3篇:请求参数处理与数据校验

在 Web 开发中&#xff0c;请求参数处理与数据校验是保障系统稳定性的第一道防线。本文将深入探讨 Egg.js 框架中参数处理的完整解决方案&#xff0c;涵盖常规参数获取、高效校验方案、文件流处理等核心功能&#xff0c;并分享企业级项目中的最佳实践。 一、多场景参数获取策略…...

Android JIT编译:adb shell cmd package compile选项

Android JIT编译&#xff1a;adb shell cmd package compile选项 例如&#xff1a; adb shell cmd package compile -m speed -f --full 包名 配置参数指令说明&#xff1a; compile [-r COMPILATION_REASON] [-m COMPILER_FILTER] [-p PRIORITY] [-f] [--primary-dex] …...

排序算法——冒泡排序

一、介绍 「冒泡排序bubblesort」通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样&#xff0c;因此得名冒泡排序。 冒泡过程可以利用元素交换操作来模拟&#xff1a;从数组最左端开始向右遍历&#xff0c;依次比较相邻元素大小&#xff0c;如果“左…...

文献阅读篇#5:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(上)

期刊简介&#xff1a;《Advanced Engineering Informatics》创刊于2002年&#xff0c;由Elsevier Ltd出版商出版&#xff0c;出版周期Quarterly。该刊已被SCIE数据库收录&#xff0c;在中科院最新升级版分区表中&#xff0c;该刊分区信息为大类学科工程技术1区&#xff0c;2023…...

工行手机银行安全吗?在应用商店下载工商银行安全吗?

现在很多的人都会用手机银行&#xff0c;其中工行的使用几率也是比较高的&#xff0c;但大家在使用的过程中就会比较关心使用工行手机银行是否安全。如果直接在应用商店下载&#xff0c;是否有安全保障&#xff1f; 工行的手机银行会拥有较高的保障&#xff0c;从技术到服务都可…...

python如何word转pdf

在Python中&#xff0c;将Word文档&#xff08;.docx或.doc&#xff09;转换为PDF可以通过多种库实现。以下是几种常见的方法及详细步骤&#xff1a; 方法1&#xff1a;使用 python-docx comtypes&#xff08;仅Windows&#xff0c;需安装Word&#xff09; 适用于Windows系统…...

在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南

前言 RabbitMQ 是业界常用的开源消息中间件,支持 AMQP 协议,易于部署、高可用、插件丰富。本文以阿里云 ECS 上运行的 Ubuntu 24.04 LTS 为例,手把手带你完成 RabbitMQ 从仓库配置到运行的全流程,并分享在国内环境下常见的坑与对应解决方案。 环境概况 操作系统:Ubuntu …...

Linux Shell 重定向与管道符号(>, >>, |)的实现机制

文章目录 Linux Shell 重定向与管道符号&#xff08;>, >>, |&#xff09;的实现机制一、重定向基础&#xff1a;dup2() 的核心作用二、输出重定向的实现原理>&#xff08;覆盖重定向&#xff09;>>&#xff08;追加重定向&#xff09; 三、| 管道符的实现原…...

GitHub 趋势日报 (2025年04月30日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1686⭐ 54925Python2Qwe…...

计算机操作系统知识集合

主要来自小林coding 硬件结构 cpu位宽 如果用 32 位 CPU 去加和两个 64 位大小的数字&#xff0c;就需要把这 2 个 64 位的数字分成 2 个低位 32 位数字和 2 个高位 32 位数字来计算&#xff0c;先加个两个低位的 32 位数字&#xff0c;算出进位&#xff0c;然后加和两个高位…...

PostgreSQL数据类型

数据类型 数值类型 整数类型 SMALLINT 小范围整数&#xff0c;取值范围&#xff1a;-32768 ~ 32767 INT&#xff08;INTEGER&#xff09; 普通大小整数&#xff0c;取值范围&#xff1a;-2147483648 ~ 2147483647 浮点数类型 REAL 6位十进制数字精度 NUMERIC(m, n) 任意精度…...

在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?

KVM&#xff08;Kernel-based Virtual Machine&#xff09;和Docker是Linux环境中两种不同的虚拟化技术&#xff0c;它们在实现原理、资源隔离程度、应用场景等方面存在显著区别&#xff1a; 实现原理与技术层级 KVM&#xff1a;KVM是一种基于硬件辅助虚拟化的全虚拟化技术&a…...

【docker学习笔记】如何删除镜像启动默认命令

一些镜像会在它打镜像时&#xff0c;加入一些默认的启动命令&#xff0c;可以通过docker inspect \<image id\>来查看Entrypoint。如下图&#xff0c;docker run启动时&#xff0c;会默认执行 "python3 -m vllm.entrypoints.openai.api_server" 如果不想执行&…...

c语言 39.0625转为16进制

c语言 39.0625转为16进制 寄存器的4&#xff5e;15对应整数部分 39为整数部分 39 &#xff08;10进制&#xff09; 0x27&#xff08;16进制&#xff09; 寄存器的0&#xff5e;3对应小数部分 0.0625为小数部分 0.0626 1/16 则0&#xff5e;3位十六进制值应为 0x1 39.06250…...