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

C++ I/O 性能优化指南

在高性能计算和大规模数据处理中,I/O 性能优化是提升系统整体效率的关键环节。C++ 作为一种高性能编程语言,提供了丰富的工具和机制来优化 I/O 操作。本文将详细介绍在 Linux 环境下,如何通过代码层面的优化、系统调用的选择以及多线程技术等手段,显著提升 C++ 程序的 I/O 性能。

1. 选择合适的 I/O 模式

1.1 同步 I/O 与异步 I/O

同步 I/O 操作会阻塞当前线程,直到操作完成,这可能导致性能瓶颈。相比之下,异步 I/O(如 std::asyncstd::future 或使用专门的异步库如 Boost.Asio)可以避免阻塞,提高程序的响应性和吞吐量。

示例

#include <iostream>
#include <thread>
#include <future>void asyncRead() {std::ifstream file("data.txt");std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());std::cout << content << std::endl;
}int main() {std::future<void> future = std::async(std::launch::async, asyncRead);future.get(); // 等待异步操作完成return 0;
}
1.2 使用高效的文件操作系统调用
  • mmap:将文件映射到内存空间,避免频繁调用 readwrite 系统调用。

  • sendfile:直接发送文件内容,避免先读取再发送。

  • readvwritev:批量处理 I/O 操作,减少系统调用次数。

示例

#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>int main() {int fd = open("data.txt", O_RDONLY);if (fd == -1) {perror("open");return 1;}struct stat sb;if (fstat(fd, &sb) == -1) {perror("fstat");close(fd);return 1;}char* map = static_cast<char*>(mmap(nullptr, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0));if (map == MAP_FAILED) {perror("mmap");close(fd);return 1;}std::cout << map << std::endl;if (munmap(map, sb.st_size) == -1) {perror("munmap");}close(fd);return 0;
}

2. 优化文件读写操作

2.1 大块读写

尽量使用较大的缓冲区进行读写操作,以减少系统调用的次数。例如,使用 freadfwrite 时,建议使用至少 4KB(或更大的 1MB)的缓冲区。

示例

#include <cstdio>
#include <cstring>
#include <iostream>int main() {FILE* file = fopen("data.txt", "rb");if (!file) {perror("fopen");return 1;}const size_t bufferSize = 4096;char buffer[bufferSize];size_t bytesRead;while ((bytesRead = fread(buffer, 1, bufferSize, file)) > 0) {// 处理读取的数据std::cout.write(buffer, bytesRead);}fclose(file);return 0;
}
2.2 顺序访问

尽量以顺序方式访问磁盘,避免随机访问,因为随机访问会导致磁盘头频繁移动,降低性能。

2.3 文件系统选择

选择适合业务需求的文件系统,例如对于高性能需求的场景,可以选择 XFSBtrfs

3. 内存管理优化

3.1 减少内存拷贝

避免不必要的内存拷贝,例如通过共享内存或移动语义来传递数据。

示例

#include <iostream>
#include <memory>int main() {std::unique_ptr<int[]> data(new int[1000000]);// 使用 data 进行操作return 0;
}
3.2 使用内存池

对于频繁分配和释放小块内存的情况,可以使用内存池来减少内存分配的开销。

示例

#include <iostream>
#include <vector>class MemoryPool {
private:std::vector<char*> pool;size_t poolSize;size_t blockSize;public:MemoryPool(size_t poolSize, size_t blockSize) : poolSize(poolSize), blockSize(blockSize) {for (size_t i = 0; i < poolSize; ++i) {pool.push_back(new char[blockSize]);}}~MemoryPool() {for (char* block : pool) {delete[] block;}}char* allocate() {if (!pool.empty()) {char* block = pool.back();pool.pop_back();return block;}return new char[blockSize];}void deallocate(char* block) {pool.push_back(block);}
};int main() {MemoryPool pool(10, 1024);char* block = pool.allocate();// 使用 block 进行操作pool.deallocate(block);return 0;
}
3.3 利用缓存

通过缓存频繁访问的数据,减少对磁盘的读取操作。

4. 编译器优化

4.1 选择合适的编译器和优化选项

使用支持高性能优化的编译器,如 GCC 或 Clang,并启用优化选项(如 -O2-O3)。

示例

g++ -O3 -march=native -mtune=native -o program program.cpp
4.2 使用 SIMD 指令

利用 SIMD(单指令多数据)指令来加速数据处理。

示例

#include <immintrin.h>
#include <iostream>int main() {__m256i vec1 = _mm256_set_epi32(1, 2, 3, 4, 5, 6, 7, 8);__m256i vec2 = _mm256_set_epi32(8, 7, 6, 5, 4, 3, 2, 1);__m256i result = _mm256_add_epi32(vec1, vec2);int* resultArray = reinterpret_cast<int*>(&result);for (int i = 0; i < 8; ++i) {std::cout << resultArray[i] << " ";}std::cout << std::endl;return 0;
}

5. 多线程和多进程

5.1 并行处理

使用多线程或多进程来充分利用多核 CPU 的计算能力。

示例

#include <iostream>
#include <thread>
#include <vector>void processChunk(const std::vector<int>& data, size_t start, size_t end) {for (size_t i = start; i < end; ++i) {// 处理数据std::cout << data[i] << " ";}
}int main() {std::vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};size_t numThreads = 4;size_t chunkSize = data.size() / numThreads;std::vector<std::thread> threads;for (size_t i = 0; i < numThreads; ++i) {size_t start = i * chunkSize;size_t end = (i == numThreads - 1) ? data.size() : (start + chunkSize);threads.emplace_back(processChunk, std::ref(data), start, end);}for (auto& thread : threads) {thread.join();}return 0;
}
5.2 线程池

使用线程池来管理线程,避免频繁创建和销毁线程带来的开销。

示例

#include <iostream>
#include <thread>
#include <vector>
#include <queue>
#include <functional>
#include <mutex>
#include <condition_variable>class ThreadPool {
private:std::vector<std::thread> workers;std::queue<std::function<void()>> tasks;std::mutex queueMutex;std::condition_variable condition;bool stop;public:ThreadPool(size_t numThreads) : stop(false) {for (size_t i = 0; i < numThreads; ++i) {workers.emplace_back([this] {while (true) {std::function<void()> task;{std::unique_lock<std::mutex> lock(this->queueMutex);this->condition.wait(lock, [this] { return this->stop || !this->tasks.empty(); });if (this->stop && this->tasks.empty()) {return;}task = std::move(this->tasks.front());this->tasks.pop();}task();}});}}~ThreadPool() {{std::unique_lock<std::mutex> lock(queueMutex);stop = true;}condition.notify_all();for (std::thread& worker : workers) {worker.join();}}template <class F, class... Args>auto enqueue(F&& f, Args&&... args) -> std::future<typename std::result_of<F(Args...)>::type> {using return_type = typename std::result_of<F(Args...)>::type;auto task = std::make_shared<std::packaged_task<return_type()>>(std::bind(std::forward<F>(f), std::forward<Args>(args)...));std::future<return_type> res = task->get_future();{std::unique_lock<std::mutex> lock(queueMutex);if (stop) {throw std::runtime_error("enqueue on stopped ThreadPool");}tasks.emplace([task]() { (*task)(); });}condition.notify_one();return res;}
};int main() {ThreadPool pool(4);auto future1 = pool.enqueue([] { return 1; });auto future2 = pool.enqueue([] { return 2; });std::cout << "Result 1: " << future1.get() << std::endl;std::cout << "Result 2: " << future2.get() << std::endl;return 0;
}

6. 减少锁竞争

6.1 减少锁的粒度

使用多个小锁代替一个大锁,减少锁的持有时间。

6.2 使用读写锁

在读多写少的场景中,使用读写锁可以提高性能。

示例

#include <iostream>
#include <shared_mutex>
#include <thread>
#include <vector>class SharedData {
private:std::shared_mutex mutex;int data;public:SharedData(int initialData) : data(initialData) {}int readData() {std::shared_lock<std::shared_mutex> lock(mutex);return data;}void writeData(int newData) {std::unique_lock<std::shared_mutex> lock(mutex);data = newData;}
};void reader(SharedData& sharedData) {for (int i = 0; i < 10; ++i) {std::cout << "Reader: " << sharedData.readData() << std::endl;}
}void writer(SharedData& sharedData) {for (int i = 0; i < 10; ++i) {sharedData.writeData(i);std::this_thread::sleep_for(std::chrono::milliseconds(100));}
}int main() {SharedData sharedData(0);std::thread readerThread(reader, std::ref(sharedData));std::thread writerThread(writer, std::ref(sharedData));readerThread.join();writerThread.join();return 0;
}
6.3 无锁编程

在可能的情况下,使用无锁编程技术。

7. 其他优化技巧

7.1 预读取和预写入

使用 madvise 系统调用告知内核内存访问模式,以便更高效地使用内存。

示例

#include <sys/mman.h>
#include <iostream>int main() {int* data = new int[1000000];madvise(data, sizeof(int) * 1000000, MADV_WILLNEED);// 使用 data 进行操作delete[] data;return 0;
}
7.2 大页支持

启用大页支持,减少页表开销。

示例

echo 10 > /proc/sys/vm/nr_hugepages
7.3 网络优化

选择合适的网络协议,并调整协议栈参数以优化网络延迟或吞吐量。

示例

#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <iostream>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd == -1) {perror("socket");return 1;}struct sockaddr_in servaddr;servaddr.sin_family = AF_INET;servaddr.sin_port = htons(8080);servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1) {perror("connect");close(sockfd);return 1;}const char* message = "Hello, Server!";send(sockfd, message, strlen(message), 0);char buffer[1024];recv(sockfd, buffer, sizeof(buffer), 0);std::cout << "Received: " << buffer << std::endl;close(sockfd);return 0;
}

总结

通过上述方法,可以显著提升 C++ 程序的 I/O 性能。具体优化方案需要根据实际应用场景进行选择和调整。希望本文能帮助你在开发高性能 C++ 应用时,更好地理解和应用这些优化技巧。

相关文章:

C++ I/O 性能优化指南

在高性能计算和大规模数据处理中&#xff0c;I/O 性能优化是提升系统整体效率的关键环节。C 作为一种高性能编程语言&#xff0c;提供了丰富的工具和机制来优化 I/O 操作。本文将详细介绍在 Linux 环境下&#xff0c;如何通过代码层面的优化、系统调用的选择以及多线程技术等手…...

Idea忽略已提交文件

全局忽略 项目根目录下新增.gitignore文件&#xff0c;写入想要忽略的信息&#xff0c;以下可参考 **/src/main/resources/application-local.yamltarget/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/### IntelliJ IDEA ### .idea/mod…...

Mamba原理及在low-level vision的工作[持续更新]

文章目录 Mamba原理选择性扫描&#xff08;Selective Retain Information&#xff09;&#xff1a;选择有关/无关信息状态空间模型&#xff08;SSM&#xff09;Mamba的选择性保留信息Mamba的扫描操作&#xff08;The Scan Operation&#xff09; 硬件感知&#xff08;Hardware-…...

openlayers入门02 -- 地图控件

地图控件 1.视图跳转控件&#xff08;ZoomToExtent&#xff09; 视图跳转控件用于将地图快速跳转到指定的范围。示例&#xff1a; // 视图跳转控件&#xff08;extent这里用的是学校的经纬度范围&#xff0c;可以按照需要修改&#xff09; const ZoomToExtent new ol.contro…...

Python 装饰器(Decorator)

文章目录 代码解析1. 装饰器定义 timer(func)2. 应用装饰器 timer **执行流程****关键点****实际应用场景****改进版本&#xff08;带 functools.wraps&#xff09;** 这是一个 Python 装饰器&#xff08;Decorator&#xff09; 的示例&#xff0c;用于测量函数的执行时间。下…...

UE的AI判断队伍归属的机制:IGenericTeamAgentInterface接口

从官方论坛老哥那学来的&#xff0c;优点在于使用项目设置&#xff0c;像配置碰撞一样&#xff0c;能配置碰撞通道对其他碰撞通道的反应&#xff0c;如阻挡&#xff0c;忽略&#xff0c;重叠&#xff0c;全局配置队伍归属&#xff0c;也能配置当前队伍对其他队伍的身份识别&…...

安宝特新闻丨Vuzix Core™波导助力AR,视角可调、高效传输,优化开发流程

Vuzix Core™ 光波导技术 近期&#xff0c;Vuzix Core™光波导技术赋能AR新视界&#xff01;该系列镜片支持定制化宽高比调节及20至40视场角范围&#xff0c;可灵活适配各类显示引擎。通过创新的衍射光波导架构&#xff0c;Vuzix Core™实现了光学传输效率与图像质量的双重突破…...

基于springboot留守儿童网站的设计与实现 docx

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

AST 技术进行 JavaScript 反混淆实战

一、AST 技术核心原理 抽象语法树&#xff08;AST&#xff09; 是代码的“骨架”&#xff0c;它把代码拆解成一个个节点&#xff0c;就像把一棵大树拆成树枝、树叶一样。通过分析和修改这些节点&#xff0c;我们可以精准地还原代码的逻辑。 二、实战案例 1&#xff1a;还原字…...

基于ECharts+Spark的疫情防控数据分析平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;特别是近几年来&#xff0c;新冠疫情出现以来&#xff0c;疫情防控数据分析平台当然不能排除在外。我本次开发的疫情防控数据分析平台是在…...

wireshark过滤器表达式的规则

1.抓包过滤器语法和实例 抓包过滤器类型Type&#xff08;host、net、port&#xff09;、方向Dir&#xff08;src、dst&#xff09;、协议Proto&#xff08;ether、ip、tcp、udp、http、icmp、ftp等&#xff09;、逻辑运算符&#xff08;&&与、|| 或、&#xff01;非&am…...

使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示

使用 Python 扫描 Windows 下的 Wi-Fi 网络 代码实现代码解析 1. 导入库2. 解码混合编码3. 扫描 Wi-Fi 网络4. 运行函数 这是我当前电脑的 wifi 连接界面。 这个是运行的效果图&#xff1a; 代码实现 我们使用了 Python 的 subprocess 模块来调用 Windows 的内置命令 netsh…...

Redis 字符串(String)详解

1. 什么是字符串类型 在 Redis 中&#xff0c;字符串&#xff08;String&#xff09; 是最基本的数据类型。它可以包含任何数据&#xff0c;比如文本、JSON、甚至二进制数据&#xff08;如图片的 Base64 编码&#xff09;&#xff0c;最大长度为 512 MB。 字符串在 Redis 中不…...

【Taro3.x + Vue3】搭建微信小程序

IOS环境为例 打开终端环境有多种办法&#xff0c;例举一个&#xff1a;在访达里新建一个文件夹&#xff0c;鼠标右键选择。 一、先安装Taro的环境 npm install -g tarojs/cli安装完成后&#xff0c;可以输入命令检验是否安装成功&#xff1a; taro --version二、创建项目 …...

P8668 [蓝桥杯 2018 省 B] 螺旋折线

题目 思路 一眼找规律题&#xff0c;都 1 0 9 10^9 109说明枚举必然超时&#xff0c;找规律&#xff0c;每个点找好像没有什么规律&#xff0c;尝试找一下特殊点&#xff0c;比如&#xff1a;对角线上的点 4 16 36(右上角&#xff09; 4k^2&#xff0c;看在第几层&#xff08;…...

【14】数据结构之哈夫曼树篇章

目录标题 哈夫曼树哈夫曼树的定义哈夫曼树的构造哈夫曼编码哈夫曼树的实现 哈夫曼树 哈夫曼树的定义 路径&#xff1a;从一个结点到另一个结点的路线树的路径长度&#xff1a;从树根到树中每个结点的路径长度之和结点的权&#xff1a;在一些应用中&#xff0c;赋予树中结点的…...

初识SpringAI(接入硅基流动deepseek)

①创建项目 ②application.yml spring:application:name: pgs-aiai:openai:api-key: sk-vrozloxjpjgkozaggtodbmwyfmubmxqpdpbvbbxpcgleanugbase-url: https://api.siliconflow.cn/chat:options:model: deepseek-ai/DeepSeek-V3 api-key&#xff1a;去硅基流动官网生成你的密钥…...

两个有序序列合并算法分析

一 问题背景 合并两个有序序列是常见操作,例如在归并排序中。传统方法需要额外空间,时间复杂度为 O(n)。但若要求原地合并(不占用额外内存),则需借助 手摇算法(或称内存反转或三次反转算法)。 二 手摇算法原理 手摇算法通过三次反转操作,实现数组片段的原…...

Robot---SPLITTER行星探测机器人

1 背景 先给各位读者朋友普及一个航天小知识&#xff0c;截止到目前为止&#xff0c;登陆火星的火星车有哪些&#xff1f;结果比较令人吃惊&#xff1a;当前只有美国和中国登陆过火星。 “勇气”号&#xff08;Spirit&#xff09;&#xff1a;2004年1月4日&#xff0c;美国国家…...

kafka的topic扩容分区会对topic任务有什么影响么

在 Kafka 中对 Topic 进行扩容分区会对相关任务产生多方面的影响&#xff0c;下面为你详细介绍&#xff1a; 积极影响 增强并发处理能力&#xff1a;Kafka 中数据是以分区为单位进行并行处理的&#xff0c;增加分区数量意味着可以让更多的消费者并行消费数据。比如&#xff0…...

每日一题(小白)模拟娱乐篇27

由题意可以得知这是一道暴力模拟的题目&#xff0c;我们只需要根据题意说的模拟整个过程即可。首先需用循环接收n个数字&#xff0c;每次判断这个数字是否出现过&#xff0c;若没有出现则为对应的负值&#xff0c;若出现过则需要将这个坐标减去之前坐标的值再减一返回&#xff…...

进行性核上性麻痹患者,饮食 “稳” 健康

进行性核上性麻痹作为一种复杂且罕见的神经系统退行性疾病&#xff0c;给患者的身体机能和日常生活带来严重挑战。在积极接受专业治疗的同时&#xff0c;合理的饮食安排对于维持患者营养状况、缓解症状及提升生活质量起着关键作用。以下为患者提供一些健康饮食建议。 首先&…...

GitLab之搭建(Building GitLab)

GitLab之搭建 “ 在企业开发过程中&#xff0c;GitLab凭借其强大的版本管理、CI/CD集成和项目管理功能&#xff0c;成为许多团队的首选工具。本文将探讨GitLab的基础介绍、搭建过程、权限管理、代码审查以及团队知识管理等方面。通过详细的步骤和实用的技巧&#xff0c;旨在帮…...

R 语言科研绘图第 38 期 --- 饼状图-玫瑰

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

array和list在sql中的foreach写法

在MyBatis中&#xff0c;<foreach>标签用于处理集合或数组类型的参数&#xff0c;以便在SQL语句中动态生成IN子句或其他需要遍历集合的场景。以下是array和list在SQL中的<foreach>写法总结。 <if test"taskIds ! null and taskIds.length > 0">…...

国内MCP服务有哪些?MCP服务器搜索引擎哪家好?

随着MCP&#xff08;Model Context Protocol&#xff09;协议的广泛应用&#xff0c;国内出现了越来越多的MCP服务提供商&#xff0c;这些服务覆盖了从开发工具、数据科学到金融、游戏等多个领域。 如果你对MCP协议和相关开发感兴趣&#xff0c;可以访问AIbase&#xff08;htt…...

二叉树的应用

目录 一、二叉树遍历算法的应用 二、树的存储结构 1、双亲表示法 2、孩子表示法 带双亲的孩子链表 3、孩子兄弟表示法&#xff08;左孩子、右兄弟&#xff09;较为普遍 三、森林与二叉树的转换 四、哈夫曼树 哈夫曼&#xff08;Huffman&#xff09;树的构造 一、二叉树…...

【LaTeX】

基本使用 \documentclass 类型&#xff1a;文章&#xff08;article&#xff09;、报告&#xff08;report&#xff09;、书&#xff08;book&#xff09; 中文的文章是ctexart&#xff0c;中文字体是UTF8 \documentclass[UTF8]{ctexart} []说明可以省略不写的意思&#xf…...

Java基础 - 泛型(基本概念)

文章目录 基本概念参数化类型类型安全和编译时检查 为什么需要泛型&#xff1f;解决类型安全问题避免重复代码提高可读性和维护性 泛型&#xff08;Generics&#xff09;是编程语言中一种支持参数化类型的特性&#xff0c;允许在定义类、接口、方法时使用类型参数&#xff08;T…...

面试之《前端信息加密》

前端代码是直接暴漏给用户的&#xff0c;请求的接口也可以通过控制台network看到参数&#xff0c;这是不够安全的&#xff0c;如果遇到坏人想要破坏&#xff0c;可以直接修改参数&#xff0c;或者频繁访问导致系统崩溃&#xff0c;或数据毁坏。 所以信息加密在某些场合就变得非…...

【含文档+PPT+源码】基于微信小程序的小区物业收费管理系统

项目视频介绍&#xff1a; 毕业作品基于微信小程序的小区物业收费管理系统 课程简介&#xff1a; 本课程演示的是一款基于微信小程序的小区物业收费管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目…...

KDD 2025 顶会最新力作,多变量时间序列预测登顶!

在多变量时间序列预测领域&#xff0c;如何高效捕捉时间分布变化和通道间复杂关系是两大核心挑战。传统方法往往难以同时处理时间模式的异质性和通道间的噪声影响。近期&#xff0c;基于时频结合的方法在这一领域取得了显著进展。本文总结了两篇创新性论文&#xff0c;分别从时…...

for循环的优化方式、循环的种类、使用及平替方案。

本篇文章主要围绕for循环,来讲解循环处理数据中常见的六种方式及其特点,性能。通过本篇文章你可以快速了解循环的概念,以及循环在实际使用过程中的调优方案。 作者:任聪聪 日期:2025年4月11日 一、循环的种类 1.1 默认有以下类型 原始 for 循环 for(i = 0;i<10;i++){…...

OpenFeign 的实现原理详解

前言 OpenFeign 是一个声明式的 HTTP 客户端&#xff0c;它简化了服务间的 HTTP 调用。通过简单的注解和接口定义&#xff0c;开发者可以轻松调用远程服务&#xff0c;而无需手动编写复杂的 HTTP 请求代码。本文将深入探讨 OpenFeign 的实现原理&#xff0c;并结合源码分析其核…...

const关键字理解

const关键字主要的作用是告诉编译器这个东西是个常量&#xff0c;不可被修改。 或者是用来和指针玩一些奇奇怪怪的东西&#xff0c;这玩意面试八股文常青树。 const int* p&#xff1a;//表示指针指向的内容不能更改&#xff0c;指针可以更改。 int* const p: //表示指针不能…...

操作系统 4.3-生磁盘的使用

磁盘的物理组成 盘面&#xff1a; 磁盘由多个盘面组成&#xff0c;每个盘面上都有数据存储的区域。 磁道&#xff1a; 每个盘面上都有若干个同心圆&#xff0c;这些同心圆称为磁道。磁道是数据存储的路径。 扇区&#xff1a; 磁道被进一步划分为若干个扇区&#xff0c;扇区…...

Uniapp Vue 实现当前日期到给定日期的倒计时组件开发

应用场景与需求分析 在移动端应用开发中&#xff0c;倒计时功能是常见的交互需求&#xff0c;例如限时促销活动、订单超时提醒、考试倒计时等场景。本文将基于 Uniapp 框架&#xff0c;实现一个从当前日期到给定日期的倒计时组件&#xff0c;支持显示 HH:mm:ss 格式的剩余时间…...

3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换

3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换 3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换...

操作系统 3.3-多级页表和快表

分页的问题 这张幻灯片讨论了操作系统中内存管理的一个核心问题&#xff1a;页大小与页表大小之间的权衡。 页&#xff08;Page&#xff09;是内存管理中的一个基本概念&#xff0c;指的是将虚拟内存分割成固定大小的块&#xff0c;以便于管理和访问。页的大小直接影响内存空间…...

Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)

阿里云的KMS&#xff08;Key Management Service&#xff09;也是一种托管式密钥管理服务&#xff0c;帮助用户安全地创建、控制和使用密钥&#xff0c;保护敏感数据。通过使用KSM&#xff0c;您可以专注于构建和优化应用程序&#xff0c;而不必担心密钥管理的复杂性。 1、主要…...

游戏引擎学习第218天

构建并运行&#xff0c;注意一下在调试系统关闭前人物的移动速度 现在我准备开始构建项目。如果我没记错的话&#xff0c;我们之前关闭了调试系统&#xff0c;主要是为了避免大家在运行过程中遇到问题。现在调试系统没有开启&#xff0c;一切运行得很顺利&#xff0c;看到那个…...

城电科技 | 光伏太阳花:碳减排路上的璀璨新光光伏智慧花

当谈及 “碳减排” 与 “碳中和”&#xff0c;你脑海中率先浮现的是什么&#xff1f;想必很多人都会想到太阳能发电。太阳能光伏&#xff0c;作为人类取之不尽、用之不竭的绿色清洁能源&#xff0c;具备充分的清洁性、高度的安全性以及相对的广泛性。正因如此&#xff0c;在探讨…...

AI领域再突破,永洪科技荣获“2025人工智能+创新案例”奖

在2025年的今天&#xff0c;人工智能已从技术概念全面渗透至产业核心。中国作为全球AI技术应用的前沿阵地&#xff0c;正通过“人工智能”行动加速推进技术与实体经济深度融合。 这一背景下&#xff0c;永洪科技凭借其“国内某头部ICT人力资源板块GenAI项目”荣获“2025全国企业…...

大模型day1 - 什么是GPT

什么是GPT 全称 Generative Pre-trained Transformer 是一种基于 Transformer 架构的大规模 预训练 语言模型&#xff0c;由OpenAI研发&#xff0c;但GPT仅仅只是借鉴了Transformer 中 Decoder 的部分&#xff0c;并且做了升级 Transformer 架构 Transformer架构 是一种用于…...

飞凌嵌入式T527核心板正式发布OpenHarmony4.1系统,实现从芯片架构到操作系统的全链路国产化

飞凌嵌入式FET527N-C核心板正式发布OpenHarmony4.1系统&#xff0c;实现了从芯片架构到操作系统的全链路国产化。该产品具备灵活可编程、高效能运算、低成本控制等多重优势&#xff0c;通过多核异构设计同步支持边缘智能计算与精准实时控制&#xff0c;能够满足智能制造、能源管…...

机动车号牌管理系统设计与实现(代码+数据库+LW)

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对机动车号牌信息管理的提升&…...

测试模板1

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...

小试牛刀-抽奖程序

编写抽奖程序 需求&#xff1a;设计一个抽奖程序&#xff0c;点击抽奖按钮随机抽取一个名字作为中奖者 目标&#xff1a;了解项目结构&#xff0c;简单UI布局&#xff0c;属性方法、事件方法&#xff0c;程序运行及调试 界面原型 ​ 待抽奖&#xff1a; 点击抽奖按钮&#x…...

Foundry框架在FISCO BCOS区块链中的高级应用与实战技巧

引言:从入门到精通的进阶之路 在看过我发布的《FISCO BCOS区块链智能合约测试利器:Foundry框架从入门到实战》基础上,我们可以进一步深入探索Foundry框架在FISCO BCOS生态中的高级应用场景。Foundry作为一款强大的区块链开发工具集,其功能远不止于基础测试,它还能为FISCO…...

反转链表系列

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int …...