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

TensorFlow 安装全攻略

选择 TensorFlow 的原因:
TensorFlow 是一个端到端平台,它提供多个抽象级别,因此您可以根据自己的需求选择合适的级别。您可以使用高阶 Keras API 构建和训练模型,该 API 让您能够轻松地开始使用 TensorFlow 和机器学习。如果您需要更高的灵活性,则可以借助即刻执行环境进行快速迭代和直观的调试。对于大型机器学习训练任务,您可以使用 Distribution Strategy API 在不同的硬件配置上进行分布式训练,而无需更改模型定义。
在这里插入图片描述

无可置疑 TensorFlow 无疑是初学者的第一选择,里面集成的高阶 Keras API 让你在构建深度神经网络时像传统机器学习那样简单,解析来我们就来说一说应该怎么安装 TensorFlow 这个强大的框架。

🌟 一、TensorFlow 安装前的准备工作

在安装之前建议使用官方 Python 发行版,即 Anaconda,因为它自带了许多科学计算的库,如 numpy 和 scipy,这些库在 TensorFlow 中也会用到,如果你不知道怎么安装 Anaconda, 可以参考我这篇文章:https://blog.csdn.net/YYDS_54/article/details/145896360?spm=1011.2415.3001.5331。

1. 系统要求

  • 操作系统:支持 Windows 7+、macOS 10.12+、Ubuntu 16.04+
  • Python 版本:推荐使用 Python 3.7-3.9(避免 3.10+ 版本兼容性问题)
  • 硬件支持
    • CPU 版本:普通计算机即可运行
    • GPU 版本:需 NVIDIA 显卡(CUDA Compute Capability ≥ 3.5)

2. 安装工具选择
新手建议选择 Anaconda 简单好上手,好管理项目,下面整理的三个工具任选其一即可:

工具优势适用场景
Anaconda集成科学计算库,一键创建虚拟环境新手友好,适合复杂项目
Miniconda轻量级 Anaconda,按需安装依赖节省磁盘空间,高级用户
venvPython 内置虚拟环境工具简单项目,无需额外安装
🖥️ 二、多平台安装实战

1. Windows 系统安装

  • Step 1:安装 Miniconda
    下载地址:https://docs.conda.io/en/latest/miniconda.html
    安装时勾选「Add to PATH」(将环境配置到系统变量里面)。

  • Step 2:创建虚拟环境

    conda create -n tf_env python=3.8
    conda activate tf_env
    
  • Step 3:安装 TensorFlow

    # CPU 版本
    pip install tensorflow==2.12.0# GPU 版本(需提前安装 CUDA 11.8 + cuDNN 8.9)
    pip install tensorflow-gpu==2.12.0
    

    如果你不知道怎么查看自己电脑上是否有 GPU,可以参考我这篇文章:https://blog.csdn.net/YYDS_54/article/details/145896360?spm=1011.2415.3001.5331,里面有详细的 Anaconda 安装教程以及电脑查看 GPU 的详细教程。

2. Linux 系统安装

Linux 系统没有太多需要注意的地方,只需要按下面的步骤操作即可:

  • Step 1:更新系统

    sudo apt update && sudo apt upgrade -y
    
  • Step 2:安装 Python 依赖

    sudo apt install python3-dev python3-pip
    
  • Step 3:创建虚拟环境

    python3 -m venv tf_env
    source tf_env/bin/activate
    
  • Step 4:安装 TensorFlow

    # 国内用户加速(清华源)
    pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple
    

3. macOS 系统安装

因为 TensorFlow 是一个由 Google Brain 研究人员和开发者最初开发的开源软件库,所以 TensorFlow 对于 macOS 支持还是比较大的,所以安装方式也非常简单,参照下面的步骤就可以。

  • M1/M2 芯片用户注意

    • 原生支持:pip install tensorflow-macos
    • 性能优化:pip install tensorflow-metal
  • Intel 芯片安装

    # 安装 Rosetta 2(需重启)
    softwareupdate --install-rosetta# 安装 TensorFlow
    conda create -n tf_env python=3.8
    conda activate tf_env
    pip install tensorflow==2.12.0
    
⚠️ 三、常见问题及解决方案

下面我整理了一些网络上常见的错误信息,如果大家在安装的过程中出现了错误,也可以根据下面的内容进行更正。

1. GPU 安装失败

  • 错误提示No module named 'tensorflow'
    • 解决方案
      1. 检查 CUDA 版本与 TensorFlow 兼容性(参考:https://www.tensorflow.org/install/source#gpu)
      2. 手动配置环境变量:
        # Linux/macOS
        export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH# Windows
        控制面板 → 系统 → 高级系统设置 → 环境变量 → 新建 CUDA_PATH
        

2. pip 安装超时

  • 解决方案
    # 临时使用清华源
    pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
    

3. 权限问题

  • 错误提示Permission denied
    • 解决方案
      # Linux/macOS 使用 --user 选项
      pip install tensorflow --user
      

4. Python 版本冲突

  • 错误提示ModuleNotFoundError: No module named 'tensorflow'
    • 解决方案
      # 检查当前 Python 版本
      python --version# 确保虚拟环境已激活
      conda activate tf_env
      

上面的内容如果还没有解决你所遇到的问题,可以直接跳到第六步,进入官方社区寻求帮助。

🧪 四、安装验证与性能测试

安装完之后我猜你一定手痒了,下面有一些简单的代码测试是否安装成功,你也可以跟着试一试。
1. 基础验证

import tensorflow as tfprint(f"TensorFlow 版本:{tf.__version__}")
print(f"可用 GPU:{tf.config.list_physical_devices('GPU')}")

2. GPU 性能测试

import time# 矩阵乘法测试
size = 10000
with tf.device('/GPU:0'):a = tf.random.normal([size, size])b = tf.random.normal([size, size])start = time.time()c = tf.matmul(a, b)print(f"GPU 耗时:{time.time() - start:.2f}s")
💡 五、实战技巧与优化建议

这里给大家整理一些比较方便的指令和方法,大家可以根据需要收藏,以备不时之需。

1. 虚拟环境管理

# 查看所有环境
conda env list# 克隆环境
conda create --name tf_env_new --clone tf_env# 删除环境
conda remove --name tf_env --all

2. 版本锁定

# 导出依赖
pip freeze > requirements.txt# 安装指定版本
pip install -r requirements.txt

3. 内存优化

# 限制 GPU 显存使用
gpus = tf.config.list_physical_devices('GPU')
if gpus:try:tf.config.set_logical_device_configuration(gpus[0],[tf.config.LogicalDeviceConfiguration(memory_limit=4096)])except RuntimeError as e:print(e)
📚 六、官方资源与社区支持
  • TensorFlow 官方文档:https://www.tensorflow.org/
  • Stack Overflow 热门问题:https://stackoverflow.com/questions/tagged/tensorflow
  • GitHub 问题追踪:https://github.com/tensorflow/tensorflow/issues
🚀 总结

通过本文的一步步指导,你可以轻松完成 TensorFlow 的多平台安装,并掌握常见问题的解决方法。在实际开发中,建议优先使用虚拟环境隔离项目依赖,并根据硬件配置选择合适的 TensorFlow 版本。遇到复杂问题时,可结合官方文档和社区资源快速定位解决方案。

安装常见错误代码速查表

  • CUDA_ERROR_INVALID_DEVICE:检查显卡兼容性
  • cuDNN version mismatch:重新安装匹配的 cuDNN 版本
  • pip install timeout:切换国内镜像源或使用代理

祝大家在深度学习的道路上一帆风顺! 🌟

相关文章:

TensorFlow 安装全攻略

选择 TensorFlow 的原因: TensorFlow 是一个端到端平台,它提供多个抽象级别,因此您可以根据自己的需求选择合适的级别。您可以使用高阶 Keras API 构建和训练模型,该 API 让您能够轻松地开始使用 TensorFlow 和机器学习。如果您需…...

Dijkstra 算法代码步骤[leetcode.743网络延迟时间]

有 n 个网络节点,标记为 1 到 n。 给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。 现在,…...

Ubuntu22.04/24.04 P104-100 安装驱动和 CUDA Toolkit

硬件环境 使用一块技嘉 B85m-DS3H 安装 P104-100, CPU是带集成显卡的i5-4690. 先在BIOS中设置好显示设备优先使用集成显卡(IGX). 然后安装P104-100开机. 登入Ubuntu 后查看硬件信息, 检查P104-100是否已经被检测到 # PCI设备 lspci -v | grep -i nvidia lspci | grep NVIDIA …...

Golang 学习指南

目录 变量与常量数据类型与控制结构常用数据结构函数与错误处理指针与并发Gin 框架与 go mod小结与参考资料 1. 变量与常量 变量(var) 用于定义可变的值。可以指定类型,也可以自动推断类型。示例:var name string "Golang…...

Ubuntu 磁盘空间占用清理(宝塔)

目录 前言1. 基本知识2. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 本身自搭建了一个宝塔,突然一下子多了好些空…...

AntBio: 2025 AACR Meeting - Charting New Oncology Frontiers Together

AntBio cordially invites you to attend the 2025 AACR Annual Meeting and jointly chart a new course in oncology research! The global benchmark for cancer research and therapeutics—the 2025 American Association for Cancer Research (AACR) Annual Meeting—wi…...

数模学习:二,MATLAB的基本语法使用

注释代码: (1)在每行语句后面加上分号,则不显示该行代码的运算结果。 在每行代码前加%,则该行代码会被注释掉 (2) 多行注释: 选中要注释的多行语句,按快捷键Ctrl R (3) 取消注释: 选中要注释的多行语句…...

【Webpack \ Vite】多环境配置

环境变量脚本命令 如何通过不同的环境变量或不同的配置文件进行项目区分,动态加载配置。通常,使用环境变量是最简单且灵活的方法,因为它不需要改变构建命令或创建多个配置文件 环境变量 在根目录下创建 .env.xxx 文件,为不同的环…...

已知漏洞打补丁

. 打补丁 根据MS漏洞编号或者CVE漏洞编号都可以找到对应的HotfixID。 1.根据MS漏洞编号可以使用:https://learn.microsoft.com/zh-cn/security-updates/securitybulletins/securitybulletins 即可找到KB编号。 2.根据CVE漏洞编号可以使用:https://cve…...

WGS84(GPS)、火星坐标系(GCJ02)、百度地图(BD09)坐标系转换Java代码

在做基于百度地图、高德地图等电子地图做为地图服务的二次开发时,通常需要将具有WGS84等坐标的矢量数据(如行政区划、地名、河流、道路等GIS地理空间数据)添加到地图上面。 然而,在线地图大多使用的是火星坐标系,需要…...

R语言操作n

1.加载安装vegan包 2.查看data(varechem)和data(varespec),探索其维度和结构 3.基于varespec构建物种互作网络&#xff0c;输出gml文件并采用gephi可视化为图片&#xff0c;输出pdf&#xff0c;阈值为r>0.6&#xff0c;p<0.05 4.基于varespec和varechem构建物种-环境互作…...

ChatGPT与DeepSeek在科研论文撰写中的整体科研流程与案例解析

随着人工智能技术的快速发展&#xff0c;大语言模型如ChatGPT和DeepSeek在科研领域展现出强大的潜力&#xff0c;尤其是在论文撰写方面。本文旨在介绍如何利用ChatGPT和DeepSeek提升科研论文撰写的效率与质量&#xff0c;并提供一个具体案例&#xff0c;详细阐述其技术流程及公…...

VScode在 Markdown 编辑器中预览

1. 使用在线 Mermaid 编辑器 步骤&#xff1a; 打开 Mermaid Live Editor。将你 .md 文件中的 Mermaid 代码&#xff08;从 mermaid 到结束的代码块&#xff09;复制粘贴到编辑器的左侧输入框。编辑器会自动在右侧生成可视化的 ER 图。你可以点击右上角的下载按钮&#xff0c;…...

驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析

一、Power-domain 框架基础概念 ✏️ 什么是 Power-domain&#xff1f; 在 Linux 内核中&#xff0c;Power-domain&#xff08;电源域&#xff09; 是指一组硬件模块的逻辑集合&#xff0c;这些模块可以被统一控制电源状态&#xff08;上电、断电&#xff09;。 Linux 内核通…...

无人机超声波避障技术要点与难点!

一、超声波避障技术要点 4. 障碍物建模 通过最小二乘法平面拟合&#xff0c;将单点测距数据转化为障碍物表面模型&#xff0c;提高避障准确性。 使用队列&#xff08;wallqueue&#xff09;存储障碍物信息&#xff0c;并进行去重处理&#xff0c;避免重复避障。 5. 避障轨…...

ASCII字符编码标准及字符表

目录 概述 1 标准 ASCII 表&#xff08;0-127&#xff09; 2 大写字母&#xff08;A-Z&#xff09; 3 小写字母&#xff08;a-z&#xff09; 4 说明 概述 ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff…...

联想昭阳笔记本 风扇一键静音优化操作指南

【联想昭阳笔记本 一键静音优化操作指南】 第1步&#xff1a;安装官方工具 Lenovo Vantage 打开【开始菜单】→ 搜索【Microsoft Store】&#xff0c;打开。在 Store 里搜索【Lenovo Vantage】&#xff0c;下载安装。安装好后&#xff0c;打开【Lenovo Vantage】。进入【设备…...

go语言八股文(三)

1.java和go的区别 1. 语言设计目标 Java&#xff1a; 通用性&#xff1a;设计为一种通用的、面向对象的编程语言&#xff0c;适用于多种应用场景&#xff0c;如桌面应用、服务器端应用、移动应用等。跨平台性&#xff1a;通过“一次编写&#xff0c;到处运行”&#xff08;Wr…...

Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理

Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理 目录 Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理 一、简单介绍 二、现象描述 三、尝试的解决方案 1、根据应用的…...

【工具】scMultiMap基于单细胞多模态数据实现增强子与靶基因的细胞类型特异性映射

文章目录 介绍代码参考 介绍 在与疾病相关的细胞类型中绘制增强子和靶基因图谱&#xff0c;能够为全基因组关联研究&#xff08;GWAS&#xff09;变异的功能机制提供关键见解。单细胞多模态数据能够测量同一细胞中的基因表达和染色质可及性&#xff0c;从而实现细胞类型特异性…...

rt-linux下的cgroup cpu的死锁bug

一、背景 rt-linux系统有其非常大的实时性的优势&#xff0c;但是与之俱来的是该系统上有一些天然的缺陷。由于rt-linux系统允许进程在内核态执行的逻辑里&#xff0c;在持锁期间&#xff0c;甚至持spinlock锁期间&#xff0c;都能被其他进程抢占。这一特性能带来实时性的好处…...

Java 内存泄漏 详解

Java 内存泄漏是指程序中某些对象不再被使用&#xff0c;但由于某些原因无法被垃圾回收器&#xff08;Garbage Collector, GC&#xff09;回收&#xff0c;导致内存被持续占用&#xff0c;最终可能引发性能问题或 OutOfMemoryError。 本文将从底层原理、源码层面详细解释 Java …...

Rabbit MQ的基础认识

零、介绍 MQ&#xff1a;message queue&#xff08;消息队列&#xff1a;先进先出&#xff09; Rabbit MQ&#xff1a; 一、优势 1.应用解耦 2.异步提速 3.削峰填谷 4.总结 二、劣势...

GIS开发笔记(16)解决基于osg和osgearth三维地图上添加placeNode图标点击不易拾取的问题

一、实现效果 二、实现原理 在图标添加的位置同时添加一个红色圆球,半径为5000~8000米,图标和圆球挂接到同一个group节点,group节点再挂接到根节点,当点击到圆球时,通过遍历父节点就可以找到被点击的图标节点。 三、参考代码 //添加图标代码 #pragma once #include &…...

JDBC 使用流程详解

1. 加载数据库驱动 目的&#xff1a;注册数据库驱动类&#xff0c;使 JDBC 能识别特定数据库&#xff08;如 MySQL、Oracle&#xff09;。 代码示例&#xff1a; // JDBC 4.0 后无需显式加载驱动&#xff08;SPI 自动发现&#xff09;&#xff0c;但部分旧项目仍需手动加载 C…...

小白学习java第16天(上): javaWeb

0.背景介绍 1.前言 首先我们需要javaweb里面的大概流程是干什么的&#xff0c;怎么才能实现的&#xff1f;&#xff0c;每一部分是靠什么进行的&#xff1f;以及背后实现的功能是干什么的&#xff1f;。。。。对于我来说要是不解决这些&#xff0c;会让我感觉不踏实&#xff…...

vue 打包设置

1、vue webpack配置 filename: [path][base].gz,// 设置成这样就行了 const { defineConfig } require(vue/cli-service)const debug process.env.NODE_ENV ! productionconst CompressionWebpackPlugin require(compression-webpack-plugin)const TerserPlugin require(…...

Excel如何安装使用EPM插件并且汉化?

Excel如何使用EPM插件 Excel如何使用EPM插件一、安装EPM插件二、启动EPM插件三、插件汉化设置 Excel如何使用EPM插件 一、安装EPM插件 在安装EPM插件时&#xff0c;若运行安装包后出现报错提示&#xff0c;通常是因为系统缺少 Visual Studio 2010 组件&#xff0c;需先安装该…...

在Linux中使用fcntl函数和ioctl函数

特性fcntlioctl作用对象文件描述符&#xff08;通用文件操作&#xff09;设备文件&#xff08;硬件或驱动控制&#xff09;标准化程度POSIX 标准&#xff0c;行为一致设备相关&#xff0c;无统一标准典型场景文件锁、非阻塞模式、描述符复制终端控制、网络配置、硬件操作移植性…...

ESP32-S3 入门学习笔记(四):LED实验

ESP32-S3 入门学习笔记&#xff08;四&#xff09;&#xff1a;LED实验 开发板&#xff1a;正点原子ESP32S3 B站学习链接&#xff1a;link 1. GPIO&LED 简介 1.1 GPIO 简介 GPIO 是负责控制或采集外部器件信息的外设&#xff0c;主要负责输入输出功能。以下是ATK-MWS3S…...

clickhouse#复制修改数据

需求 在ClickHouse表中存在一些数据&#xff0c;你需要复制其中几行数据&#xff0c;这个复制不是完全复制&#xff0c;额外需要修改其中某几列数据项。 语句 INSERT INTO xxx_table SELECT * REPLACE ({except_value_1} AS {column_name_1},...{except_value_n} AS {colum…...

Java安全之cc链学习集合

CC1 InvokerTransformer https://blog.csdn.net/weixin_53912233/article/details/137786954 LazyMap https://blog.csdn.net/weixin_53912233/article/details/137787763 CC1链学习记录_cc1 链子 学习-CSDN博客 Java反序列化Commons-Collections篇02-CC1链补充 | Drunk…...

分享:google高级搜索常用的4个入口

网站和文件&#xff1a;google.com/advanced_search图片&#xff1a;google.com/advanced_image_search视频&#xff1a;google.com/advanced_video_search书籍&#xff1a;google.com/advanced_book_search...

内存四区(堆)

在上一次分享中&#xff0c;我和大家分享了栈区&#xff0c;今天栈区来了。 而内存四区中&#xff0c;堆区是干嘛的呢&#xff1f; 堆区&#xff0c;也是用来存放数据的&#xff0c;只不过呢&#xff0c;堆区中的数据的生死存亡是由程序员来控制的。 当然如果你一直不管堆区…...

Ldap高效数据同步- MirrorMode双主复制模式配置详解(下)

#作者&#xff1a;朱雷 上篇&#xff1a;《Ldap高效数据同步- MirrorMode双主复制模式配置详解&#xff08;上&#xff09;》 链接: link 文章目录 三、配置Mirror复制类型3.3. 在ldap-0上增加test2用户3.4. 在ldap-1上查看3.5. 在ldap-1上增加test4用户3.7. 最终两台LDAP数据…...

亚组风险比分析与可视化

1. 结果解读 1.1 风险比概述 1.1.1 风险比基本概念 风险比(Hazard Ratio)用于衡量治疗组与对照组事件发生的风险差异。 风险比为1,表示两组风险相同;小于1,治疗组风险低;大于1,治疗组风险高。 1.1.2 性别亚组分析 A性风险比小于1,表明治疗对A性有积极效果,风险降低。…...

2个小时1.5w字| React Golang 全栈微服务实战

文章目录 前言Golang 入门教程1. 下载与环境配置安装 GoWindows 安装macOS 安装Linux 安装 理解 GOROOT 和 GOPATHGOROOTGOPATHGo Modules 与 GOPATH 的关系查看和设置 Go 环境变量 配置 GOPATH 2. 语法与包管理Go 基础语法运行 Go 程序构建 Go 程序包管理 (Go Modules)常用标准…...

Spring security详细上手教学(三)密码管理

Spring security详细上手教学&#xff08;三&#xff09;密码管理 本章节两部分内容 实现PasswordEncoder使用Spring Security Crypto模块提供的工具 1. 使用 password encoder 通常&#xff0c;系统不会使用纯文本来保存密码&#xff0c;需要进行加密/哈希等一系列处理以加…...

ADC读取异常情况汇总

MCU ADC读取内部参考电压 Vrefint 如果某个输入引脚的电压高于供电电压&#xff0c;可能存在读取内部参考电压数值不准或者读数是4095。 虽然宽电压支持&#xff0c;最好硬件设计硬件避免这种情况&#xff0c;避免异常情况。...

给函数参数设置默认值的方式

在 JavaScript 中&#xff0c;给函数参数设置默认值主要有以下几种方式&#xff1a; 1. 函数体内手动检查赋值&#xff08;ES5 及以前&#xff09; 在函数内部检查参数是否为 undefined&#xff0c;然后手动赋值默认值。 function greet(name, age) {name name ! undefined…...

【C语言】内存分配的理解

很多时候我们声明变量&#xff0c;系统就自动为我们处理好了内存。 这主要取决于内存分配发生的时间和内存区域。C语言中主要有以下几种内存分配方式&#xff1a; 栈 (Stack) 内存分配 (自动内存): 何时发生: 在函数内部声明的非static局部变量&#xff08;包括基本类型如 int…...

特征工程四:数据特征提取TfidfVectorizer的使用

TfidfVectorizer 深度解析 TfidfVectorizer 是 scikit-learn 中用于文本特征提取的核心工具&#xff0c;它将原始文本转换为 TF-IDF 特征矩阵&#xff0c;是自然语言处理(NLP)和文本挖掘的基础组件。 一、核心原理 1. TF-IDF 计算 TF (Term Frequency)&#xff1a;词频&…...

深度学习涉及的数学与计算机知识总结

深度学习涉及的数学与计算机知识可总结为以下核心模块&#xff0c;结合理论与实践需求分为数学基础和计算机技能两大方向&#xff1a; 一、数学知识 线性代数 核心&#xff1a;矩阵运算&#xff08;乘法、转置、逆矩阵&#xff09;、向量空间、特征值与特征向量、奇异值分解&am…...

引领印尼 Web3 变革:Mandala Chain 如何助力 1 亿用户迈向数字未来?

当前 Web3 的发展正处于关键转折点&#xff0c;行业亟需吸引新用户以推动 Web3 的真正大规模采用。然而&#xff0c;大规模采用面临着核心挑战&#xff1a;数据泄露风险、集中存储的安全漏洞、跨系统互操作性障碍&#xff0c;以及低效的服务访问等问题。如何才能真正突破这些瓶…...

Mysql从入门到精通day6————时间和日期函数精讲

关于Mysql的日期和时间计算函数种类非常繁多,此处我们对常用的一些函数的用法通过实例演示让读者体会他们的用法,文章末尾也给出了时间和日期计算的全部函数 函数1:curdate()和current_date()函数 作用:获取当前日期 select curdate(),current_date();运行效果:...

C#如何正确的停止一个多线程Task?CancellationTokenSource 的用法。

在 C# 中停止一个 Task 需要谨慎处理&#xff0c;因为直接强制终止&#xff08;如 Thread.Abort()&#xff09;会导致资源泄漏或状态不一致。推荐使用 ​​协作式取消&#xff08;Cooperative Cancellation&#xff09;​​ 通过 CancellationToken 实现安全停止。以下是详细方…...

【Redis】Redis Zset实现原理:跳表+哈希表的精妙设计

一、实现&#xff1a; Zset有序集合是一种由 跳表(Skip List)哈希表(Hash Table) 实现的数据结构。 二、特点功能&#xff1a; Set特性排序 三、跳表与哈希表分析&#xff1a; Zset的实现由两个数据结构&#xff1a; 1.跳表(Skip List)&#xff1a;用于存储数据的排序和快…...

【前端】jQuery 对数据进行正序排列

你可以使用 jQuery 对数据进行正序排列&#xff08;按 jbsj 升序&#xff09;。以下是完整的代码示例&#xff1a; <!DOCTYPE html> <html> <head><title>按时间排序</title><script src"https://code.jquery.com/jquery-3.6.0.min.js&…...

Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:

问题描述&#xff1a; 运行matlab程序出现报错&#xff1a; 警告: 名称不存在或不是目录: xxx\vlfeat-0.9.21\toolbox\mex\mexw64 xxxx 尝试将 SCRIPT vl_sift 作为函数执行: xxxx\vlfeat-0.9.21\toolbox\sift\vl_sift.m原因分析&#xff1a; 缺少 \vlfeat-0.9.21\toolbox…...

前端权限管理

前端权限 本质上就是控制前端视图层的展示和前端所发送的请求 一、RBAC 用户&#xff08;User&#xff09;&#xff1a;系统的使用者 角色&#xff08;Role&#xff09;&#xff1a;权限的集合&#xff08;如管理员、普通用户&#xff09;。 权限&#xff08;Permission&am…...