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

【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南

优化异步任务处理:C#异步I/O库全面解析

前言

在C#开发中,异步I/O是一个重要的主题。为了提高性能和响应速度,开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库,包括Task Parallel Library、AsyncEx、Nito.AsyncEx.Context、Microsoft.IO.RecyclableMemoryStream、System.Threading.Channels和System.Net.Http.SocketsHttpHandler,帮助读者全面了解它们的特点和应用场景。

欢迎订阅专栏:C#生态园

文章目录

  • 优化异步任务处理:C#异步I/O库全面解析
    • 前言
    • 1. Task Parallel Library:一个用于C#的异步I/O库
      • 1.1 简介
      • 1.2 核心功能
      • 1.3 使用场景
      • 1.4 安装与配置
        • 1.4.1 安装指南
        • 1.4.2 基本配置
      • 1.5 API 概览
        • 1.5.1 异步任务创建
        • 1.5.2 任务并行处理
    • 2. AsyncEx:一个用于C#的异步I/O库
      • 2.1 简介
      • 2.2 核心功能
      • 2.3 使用场景
      • 2.4 安装与配置
        • 2.4.1 安装方法
        • 2.4.2 基本设置
      • 2.5 API 概览
        • 2.5.1 异步操作管理
        • 2.5.2 异步任务调度
    • 3. Nito.AsyncEx.Context:一个用于C#的异步I/O库
      • 3.1 简介
      • 3.2 核心功能
      • 3.3 使用场景
      • 3.4 安装与配置
        • 3.4.1 安装指南
        • 3.4.2 基本设置
      • 3.5 API 概览
        • 3.5.1 上下文切换管理
        • 3.5.2 异步上下文控制
    • 4. Microsoft.IO.RecyclableMemoryStream:一个用于C#的异步I/O库
      • 4.1 简介
      • 4.2 核心功能
      • 4.3 使用场景
      • 4.4 安装与配置
        • 4.4.1 安装指导
        • 4.4.2 基本配置
      • 4.5 API 概览
        • 4.5.1 内存流重用
        • 4.5.2 异步读写操作
    • 5. System.Threading.Channels:一个用于C#的异步I/O库
      • 5.1 简介
      • 5.2 核心功能
      • 5.3 使用场景
      • 5.4 安装与配置
        • 5.4.1 安装指南
        • 5.4.2 基本设置
      • 5.5 API 概览
        • 5.5.1 异步通道创建
        • 5.5.2 数据传输管理
    • 6. System.Net.Http.SocketsHttpHandler:一个用于C#的异步I/O库
      • 6.1 简介
      • 6.2 核心功能
      • 6.3 使用场景
      • 6.4 安装与配置
        • 6.4.1 安装方法
        • 6.4.2 基本设置
      • 6.5 API 概览
        • 6.5.1 异步Socket管理
        • 6.5.2 HTTP请求处理
    • 总结

1. Task Parallel Library:一个用于C#的异步I/O库

1.1 简介

Task Parallel Library(TPL)是.NET Framework中的一个库,用于简化并行任务执行和异步编程。它提供了一组用于管理任务和并发的类型和方法,可以帮助开发人员更轻松地利用多核处理器的性能。

1.2 核心功能

TPL的核心功能包括任务创建、任务并行处理、任务调度等。

1.3 使用场景

TPL通常用于需要执行大量并行或异步操作的场景,例如网络请求、文件读写、数据处理等。

1.4 安装与配置

1.4.1 安装指南

TPL是.NET Framework的一部分,因此在使用时无需额外安装。

1.4.2 基本配置

在项目中引用System.Threading.Tasks命名空间即可开始使用TPL的功能。

1.5 API 概览

1.5.1 异步任务创建
using System;
using System.Threading;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){// 异步执行任务Task<int> task = Task.Run(() =>{Thread.Sleep(2000); // 模拟耗时操作return 42;});Console.WriteLine("正在执行其他任务...");int result = await task; // 等待异步任务完成并获取结果Console.WriteLine("异步任务结果:" + result);}
}

在上面的示例中,通过Task.Run创建了一个异步任务,并使用await关键字等待任务完成并获取结果。

1.5.2 任务并行处理
using System;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){Task<int> task1 = Task.Run(() => DoWork(1));Task<int> task2 = Task.Run(() => DoWork(2));// 并行执行任务1和任务2await Task.WhenAll(task1, task2);Console.WriteLine("任务1结果:" + task1.Result);Console.WriteLine("任务2结果:" + task2.Result);}static int DoWork(int id){// 模拟耗时操作Task.Delay(2000).Wait();return id * 10;}
}

在上面的示例中,通过Task.WhenAll实现了同时等待多个任务完成。

以上是对Task Parallel Library的简要介绍和部分功能示例。更多关于TPL的信息可以查阅Microsoft官方文档。

2. AsyncEx:一个用于C#的异步I/O库

2.1 简介

AsyncEx是一个用于C#的异步I/O库,它提供了丰富的功能和工具,使得在C#中进行异步操作变得更加简单和高效。

2.2 核心功能

AsyncEx库的核心功能包括:

  • 异步操作管理
  • 异步任务调度

2.3 使用场景

AsyncEx适用于需要处理大量I/O操作的应用程序,如网络请求、文件读写等。通过利用异步操作,可以提升应用程序的响应速度和并发能力。

2.4 安装与配置

2.4.1 安装方法

可以通过NuGet包管理器来安装AsyncEx库,在Visual Studio中可以使用以下命令来安装:

Install-Package Nito.AsyncEx
2.4.2 基本设置

安装完成后,可以直接在C#项目中引用AsyncEx库,并开始使用其中的功能。

2.5 API 概览

2.5.1 异步操作管理

AsyncEx库提供了丰富的异步操作管理工具,其中最常用的包括AsyncLockAsyncSemaphore。下面是一个使用AsyncLock的示例代码:

using Nito.AsyncEx;public class MyClass
{private readonly AsyncLock _asyncLock = new AsyncLock();public async Task DoSomethingAsync(){using (await _asyncLock.LockAsync()){// 执行需要同步的操作}}
}

详细信息可以参考官方文档:AsyncLock 类

2.5.2 异步任务调度

AsyncEx库还提供了强大的异步任务调度工具,其中包括AsyncContextAsyncProducerConsumerQueue。以下是一个使用AsyncContext的示例代码:

using Nito.AsyncEx;public class MyClass
{public async Task DoSomethingAsync(){await AsyncContext.Run(() =>{// 在异步上下文中执行操作});}
}

更多细节可查看官方文档:AsyncContext 类

通过以上示例和官方链接,我们可以了解到AsyncEx库提供了丰富的异步操作管理和任务调度功能,使得C#中的异步编程变得更加简洁和高效。

3. Nito.AsyncEx.Context:一个用于C#的异步I/O库

3.1 简介

Nito.AsyncEx.Context 是一个专为 C# 设计的异步 I/O 库,它提供了便捷的异步上下文管理和控制功能,帮助开发者更好地处理异步操作。

3.2 核心功能

核心功能包括:

  • 上下文切换管理
  • 异步上下文控制

3.3 使用场景

Nito.AsyncEx.Context 适用于需要处理大量异步 I/O 操作的项目,例如网络通信、文件读写等。

3.4 安装与配置

3.4.1 安装指南

通过 NuGet 包管理器安装 Nito.AsyncEx.Context:

Install-Package Nito.AsyncEx.Context
3.4.2 基本设置

在使用 Nito.AsyncEx.Context 之前,需要在项目中引入相应的命名空间:

using Nito.AsyncEx;

3.5 API 概览

3.5.1 上下文切换管理

Nito.AsyncEx.Context 提供了方便的上下文切换管理,能够让开发者轻松地在不同的线程上执行异步操作。以下是一个简单的示例代码:

// 在 UI 线程上执行异步操作
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
{// 在 UI 线程上执行异步操作await DoSomethingAsync();
});

更多关于上下文切换管理的信息,请参考 上下文切换管理 - 官方文档

3.5.2 异步上下文控制

Nito.AsyncEx.Context 还提供了灵活的异步上下文控制功能,可以帮助开发者精细地管理异步操作的执行顺序。以下是一个简单的示例代码:

// 创建异步上下文
var context = new AsyncContext();// 在新的异步上下文中执行操作
context.Factory.Run(async () =>
{await DoSomethingAsync();
});

更多关于异步上下文控制的信息,请参考 异步上下文控制 - 官方文档

通过 Nito.AsyncEx.Context,开发者可以更加高效地处理异步 I/O 操作,提升项目的性能和稳定性。

4. Microsoft.IO.RecyclableMemoryStream:一个用于C#的异步I/O库

4.1 简介

Microsoft.IO.RecyclableMemoryStream 是一个用于 C# 的异步 I/O 库,它提供了重用内存流和异步读写操作的功能。通过这个库,可以更高效地管理内存,并且在进行 I/O 操作时减少内存分配和垃圾回收的压力。

4.2 核心功能

  • 内存流重用
  • 异步读写操作

4.3 使用场景

该库适用于需要频繁进行异步 I/O 操作的 C# 应用程序,尤其是对内存使用效率有较高要求的场景。

4.4 安装与配置

4.4.1 安装指导

可以通过 NuGet 进行安装,命令如下:

Install-Package Microsoft.IO.RecyclableMemoryStream

或者在 Visual Studio 中通过 NuGet 包管理器搜索并安装。

4.4.2 基本配置

安装完成后,可以直接在 C# 项目中引用相应的命名空间:

using Microsoft.IO;

4.5 API 概览

4.5.1 内存流重用

RecyclableMemoryStreamManager 类负责管理可重用的内存流对象。通过该类的实例,可以获取可重用的内存流对象,并在使用完毕后释放给对象池以便复用。以下是创建和释放内存流的示例代码:

// 创建 RecyclableMemoryStreamManager 实例
var streamManager = new RecyclableMemoryStreamManager();// 获取可重用内存流
using (var stream = streamManager.GetStream())
{// 使用内存流进行读写操作
}// 在使用完毕后,不需要手动释放内存流,Dispose 方法会将内存流放回对象池以供复用

更多关于内存流重用的信息,请参考官方文档。

4.5.2 异步读写操作

RecyclableMemoryStream 类继承自 .NET 原生的 MemoryStream,并提供了异步读写的 API。以下是使用异步读写操作的示例代码:

// 创建 RecyclableMemoryStreamManager 实例
var streamManager = new RecyclableMemoryStreamManager();// 获取可重用内存流
using (var stream = streamManager.GetStream())
{// 异步写入操作byte[] buffer = Encoding.UTF8.GetBytes("Hello, world!");await stream.WriteAsync(buffer, 0, buffer.Length);// 将位置设置为流的开始处,以便后续读取stream.Seek(0, SeekOrigin.Begin);// 异步读取操作byte[] readBuffer = new byte[stream.Length];await stream.ReadAsync(readBuffer, 0, readBuffer.Length);string content = Encoding.UTF8.GetString(readBuffer);Console.WriteLine(content);
}

以上是一个简单的异步写入和读取的示例,更多关于异步读写操作的详细说明请参考官方文档。

通过使用 Microsoft.IO.RecyclableMemoryStream 库,我们可以更加高效地进行异步 I/O 操作,并且充分利用内存资源,从而提升 C# 应用程序的性能和稳定性。

5. System.Threading.Channels:一个用于C#的异步I/O库

5.1 简介

System.Threading.Channels 是.NET Core 3.0中引入的一个用于支持异步 I/O 的库,它提供了高效的异步数据传输机制,能够简化并发编程,并且易于使用。

5.2 核心功能

System.Threading.Channels 主要包含以下核心功能:

  • 异步通道创建
  • 数据传输管理

5.3 使用场景

System.Threading.Channels 适用于需要高效处理异步 I/O 操作的场景,比如网络通信、文件 I/O 等。

5.4 安装与配置

5.4.1 安装指南

在使用 System.Threading.Channels 之前,需要确保项目已经引用了 .NET Core 3.0 或更高版本的运行时。

5.4.2 基本设置

在代码中引入 System.Threading.Channels 命名空间:

using System.Threading.Channels;

5.5 API 概览

5.5.1 异步通道创建

通过 System.Threading.Channels.Channel 类可以创建异步通道,示例代码如下:

// 创建无限容量的单向异步通道
var unboundedChannel = Channel.CreateUnbounded<T>();// 创建有限容量的单向异步通道
var boundedChannel = Channel.CreateBounded<T>(capacity);

官方文档链接:Channel Class

5.5.2 数据传输管理

异步通道的数据传输管理主要通过 ReadAsync 和 WriteAsync 方法进行。以下是一个简单的数据生产者和消费者的示例:

async Task Writer(ChannelWriter<int> writer)
{for (int i = 0; i < 10; i++){await writer.WriteAsync(i);}writer.Complete();
}async Task Reader(ChannelReader<int> reader)
{while (await reader.WaitToReadAsync()){while (reader.TryRead(out var item)){Console.WriteLine(item);}}
}

官方文档链接:ChannelWriter Class、ChannelReader Class

通过以上示例,我们对 System.Threading.Channels 这个用于C#的异步I/O库有了初步的了解。在实际开发中,它能够为处理异步数据传输提供便利,提高系统的并发性能。

6. System.Net.Http.SocketsHttpHandler:一个用于C#的异步I/O库

6.1 简介

System.Net.Http.SocketsHttpHandler 是 .NET Core 中的一个类,是用于处理 Socket 连接的 HTTP 处理程序。它提供了对基于连接的套接字的支持,并允许进行异步 I/O 操作,以便在高吞吐量的网络应用程序中实现更好的性能。

6.2 核心功能

  • 支持异步 I/O 操作
  • 提供对基于连接的套接字的支持
  • 用于创建和管理 HTTP 请求

6.3 使用场景

System.Net.Http.SocketsHttpHandler 适用于需要对底层网络连接进行精细控制并执行异步操作的情况,比如需要优化网络传输性能的应用程序。

6.4 安装与配置

6.4.1 安装方法

System.Net.Http.SocketsHttpHandler 可以通过 NuGet 进行安装。在 Visual Studio 中,可以通过 NuGet 包管理器搜索并安装该库。

Install-Package System.Net.Http.SocketsHttpHandler
6.4.2 基本设置

安装完成后,可以在代码中引入命名空间:

using System.Net.Http;

6.5 API 概览

6.5.1 异步Socket管理

System.Net.Http.SocketsHttpHandler 具有以下异步Socket管理的相关方法和属性,例如:

  • ConnectCallback 属性:获取或设置异步套接字连接回调。
  • ReceiveAsync 方法:异步地从网络中读取数据。

示例代码:

using System;
using System.Net.Http;
using System.Threading.Tasks;public class Program
{public static async Task Main(){using (var client = new HttpClient(new SocketsHttpHandler())){var response = await client.GetAsync("https://example.com");var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);}}
}

参考链接:SocketsHttpHandler Class

6.5.2 HTTP请求处理

System.Net.Http.SocketsHttpHandler 还包含用于处理 HTTP 请求的相关方法和属性,例如:

  • SendAsync 方法:发送 HTTP 请求并返回表示响应的任务对象。

示例代码:

using System;
using System.Net.Http;
using System.Threading.Tasks;public class Program
{public static async Task Main(){using (var client = new HttpClient(new SocketsHttpHandler())){var request = new HttpRequestMessage(HttpMethod.Get, "https://example.com");var response = await client.SendAsync(request);var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);}}
}

参考链接:SocketsHttpHandler Class

以上是关于 System.Net.Http.SocketsHttpHandler 的简要介绍和使用方法,希望对您有所帮助。

总结

异步I/O在现代软件开发中扮演着至关重要的角色,而C#作为一种流行的编程语言,在异步I/O领域也有着丰富的支持库。通过本文的介绍,读者可以对Task Parallel Library、AsyncEx、Nito.AsyncEx.Context、Microsoft.IO.RecyclableMemoryStream、System.Threading.Channels和System.Net.Http.SocketsHttpHandler等库有一个清晰的认识,从而更好地运用它们来提升自己的软件开发效率和性能。

相关文章:

【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南

优化异步任务处理&#xff1a;C#异步I/O库全面解析 前言 在C#开发中&#xff0c;异步I/O是一个重要的主题。为了提高性能和响应速度&#xff0c;开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库&#xff0c;包括Task Parallel Library、Asy…...

管理医疗AI炒作的三种方法

一个人类医生和机器人医生互相伸手。 全美的医院、临床诊所和医疗系统正面临重重困难。他们的员工队伍紧张且人员短缺&#xff0c;运营成本不断上升&#xff0c;服务需求常常超过其承受能力&#xff0c;限制了医疗服务的可及性。 人工智能应运而生。在自ChatGPT推出将AI推向聚…...

VMware Workstation Pro Download 个人免费使用

参考 VMware Workstation Pro Download...

DevOps平台搭建过程详解--Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台

一、环境说明 1.1CI/CD CI即为持续集成(Continue Integration,简称CI)&#xff0c;用通俗的话讲&#xff0c;就是持续的整合版本库代码编译后制作应用镜像。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等;(Jenkins) CD即持续交付Con…...

Nginx之日志切割,正反代理,HTTPS配置

1 nginx日志切割 1.1 日志配置 在./configure --prefixpath指定的path中切换进去&#xff0c;找到log文件夹&#xff0c;进去后找到都是对应的日志文件 其中的nginx.pid是当前nginx的进程号&#xff0c;当使用ps -ef | grep nginx获得就是这个nginx.pid的值 在nginx.conf中…...

Mysql数据量大,如何拆分Mysql数据库(垂直拆分)

垂直拆分&#xff08;Vertical Partitioning&#xff09;是一种将数据库按照业务模块或功能进行拆分的方法&#xff0c;目的是将不同模块的数据放到不同的数据库中&#xff0c;从而减少单个数据库的压力&#xff0c;提高系统的性能和可扩展性。垂直拆分适用于数据量大且业务模块…...

机器人可能会在月球上提供帮助

登月是我们这个时代最具标志性的事件之一&#xff0c;这可能还算轻描淡写了&#xff1a;这是我们迄今为止在物理上探索得最远的一次。我听过一些当时的老广播&#xff0c;它们可以让你想象出这次航行的重要性。 现在&#xff0c;研究人员表示&#xff0c;我们可能很快就能重返…...

真实案例分享:零售企业如何避免销售数据的无效分析?

在零售业务的数据分析中&#xff0c;无效分析不仅浪费时间和资源&#xff0c;还可能导致错误的决策。为了避免这种情况&#xff0c;企业必须采取策略来确保他们的数据分析工作能够产生实际的商业价值。本文将通过行业内真实的案例&#xff0c;探讨零售企业如何通过精心设计的数…...

ctfshow-文件包含

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…...

Qt事件处理机制

用qt实现简单闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H #include<QPushButton> #include<QTextEdit> #include<QLabel> #include <QWidget> #include<QMouseEvent> #include<QPoint> #include<QTime> #include<QTimer&…...

vue axios 如何读取项目下的json文件

在 Vue 项目中&#xff0c;使用 axios 读取本地的 JSON 文件可以通过将 JSON 文件放置在 public 目录中&#xff0c;然后通过 axios 发起请求读取。 步骤&#xff1a; 将 JSON 文件放置在 public 目录下&#xff1a; Vue 项目中的 public 目录是静态资源目录&#xff0c;项目编…...

燃气涡轮发动机性能仿真程序GSP12.0.4.2使用经验(二):使用GSP建立PG9351FA燃气轮机性能仿真模型

目录 一、PG9351FA燃气轮机简介及热力循环参数二、基于GSP的性能仿真模型设置环境参数设置进气道参数设置压气机参数设置燃烧室参数设置透平&#xff08;涡轮&#xff09;参数设置转子负载参数燃油流量外部控制 三、仿真结果四、其它 一、PG9351FA燃气轮机简介及热力循环参数 …...

迟滞比较器/施密特触发器

功能 从下面原理图像看来&#xff0c;只有在达到上下阈值才会出现输出电平的转换&#xff0c;这样防止信号的杂波跳变。而且每次的阈值是随着输出而变化的&#xff0c;当输出高时&#xff0c;阈值如下图中&#xff0c;V_PV_N V_R*( RF/(R1RF) )VH*( R1/(R1RF) );当输出低时&a…...

LeetCode_sql_day22(1112.每位学生的最高成绩)

描述&#xff1a;1112.每位学生的最高成绩 表&#xff1a;Enrollments ------------------------ | Column Name | Type | ------------------------ | student_id | int | | course_id | int | | grade | int | ------------------------ (st…...

OFDM信号PARP的CCDF图

文章目录 引言代码代码疑难解答参考文献 引言 本书主要参考了文献1&#xff0c;但实际上该书中符号和表述的错误非常多&#xff08;只能说棒子是这样的&#xff09;&#xff1b;同时因为发表时间的关系&#xff0c;很多MATLAB代码进行了更新&#xff0c;原书提供的代码已经无法…...

LeetCode之高频SQL50题

查询 1757. 可回收且低脂的产品 584. 寻找用户推荐人 595. 大的国家 1148. 文章浏览 I 1683. 无效的推文 连接 1378. 使用唯一标识码替换员工ID 1068. 产品销售分析 I 1581. 进店却未进行过交易的顾客 197. 上升的温度 1661. 每台机器的进程平均运行时间 577. 员工…...

echarts多组堆叠柱状图

一、效果图 二、代码实现 1、创建容器 <el-card class"box-card"><div slot"header" class"clearfix"><span>课堂学习</span></div><div id"class-learning" style"height: 360px">&l…...

打造安心宠物乐园:EasyCVR平台赋能猫咖/宠物店的智能视频监控解决方案

随着宠物经济的蓬勃发展&#xff0c;宠物店与猫咖等场所对顾客体验、宠物安全及健康管理的需求日益提升。然而&#xff0c;如何确保这些场所的安全与秩序&#xff0c;同时提升顾客体验&#xff0c;成为了经营者们关注的焦点。引入高效、智能的视频监控方案&#xff0c;不仅能够…...

springboot请求传参常用模板

注释很详细&#xff0c;直接上代码 项目结构 源码 HelloController package com.amoorzheyu.controller;import com.amoorzheyu.pojo.User; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.ti…...

HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)

跟着该视频学习&#xff0c;记录笔记&#xff1a;【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day4 内容梳理&#xff1a;…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...