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

有关Groutine无限创建的分析

有关Groutine无限创建的分析

文章目录

  • 有关Groutine无限创建的分析
    • 从操作系统分析进程、线程、协程的区别
      • 进程内存
      • 线程内存
      • 执行单元
    • cpu切换成本
      • 协程切换成本
      • 线程切换成本
      • 内存占用
    • Go程是否可以无限创建
      • 不控制go程创建引发的问题
      • 简单方式控制go程创建
        • channel有buffer
        • sync.WaitGroup
        • channel有buffer + sync.WaitGroup
        • channel无buffer + (初始准备一定数量的协程)任务发送 和 任务执行 分离
    • 总结

从操作系统分析进程、线程、协程的区别

在操作系统中,进程是就是一个程序运行。他是独占一个内存空间的个体。操作系统分配资源时,就是按照进程的极限内存大小分配的。因此,进程是操作系统资源分配的最小单元。线程是进程的一部分,多个线程构成一个进程。在一个进程中,有一块全局的内存空间(堆空间)堆空间是对所有线程共享的,每个线程都有一个独立的栈空间。因此,线程可以独立运行。cpu分配时间片就是按照进程中线程的数量分的。所以,线程是cpu调度的最小单元。由于线程的开辟受限于硬件资源,为了适应高并发的场景,增加并发量,减少cpu上下文的切换开销。我们提出了协程,协程是工作于用户态的。每个协程需要绑定一个线程才可以正常运行。协程的大小是线程的1/400000。因此可以极大的减少内存开销,同时协程上下文的切换是在用户态的,不需要用户态->内核态的转变,极大的减少了cpu的时间资源。

进程内存

首先,进程内存是一个独立的内存块,向os申请的一块虚拟内存。进程的内存由几部分组成:

内存区域作用特点
代码段(Text)存储进程的可执行代码(机器指令)只读,多个进程可共享同一份代码(如共享库)
数据段(Data)存储已初始化的全局变量和静态变量(如 static int a = 10;读写权限,程序运行期间持续存在
BSS 段存储未初始化的全局变量和静态变量(初始化为 0 或 NULL)不占用可执行文件磁盘空间,运行时由操作系统自动清零
堆(Heap)动态内存分配区域(如 C 语言的 malloc、Go 的 new由程序主动申请 / 释放,大小不固定,可能产生内存碎片
栈(Stack)存储函数调用的局部变量、参数、返回地址等由操作系统自动管理,后进先出(LIFO),大小通常有限制(如 Linux 默认 8MB)
共享库 / 动态链接存储程序运行时加载的动态链接库(如 Linux 的 .so 文件)多个进程可共享同一库的内存实例,节省内存资源
内核空间进程访问内核服务时使用的内存区域(如系统调用、文件描述符表)每个进程共享内核空间,用户态程序不能直接访问

直接由操作系统调度,操作系统以进程为单位分配资源,因此进程是操作系统资源分配的最小单元。

线程内存

线程在进程的栈区有自己的栈区,其余部分,进程内的所有线程共享。共享使得线程之间的通信更容易,内存关联性很大,一个出现问题,导致其他线程出问题,进而影响进程。所以线程是cpu调度的最小单元。

执行单元

对于Linux来讲,对于进程和线程是相同的,都被视作一个单独的执行单位。所以,进程中的线程数量影响cpu时间片的分配。通过提高进程中线程的数量来提高进程在cpu中分配到的时间片的比例。那是不是开辟越多线程越好?当然不是:cpu切换一个执行单元会花费时间和性能开销。(原因:页表查询缓慢,切换使得cache失效使得缓存命中率低,宏观表现运行速度慢)

cpu切换成本

由于cpu切换需要花费大量成本,所以不能无限制的开辟线程,我们可以考虑在用户态进行切换执行流程,让cpu内核态不再执行切换流程。因此,我们就在用户态创建一个伪执行单元——协程。

协程切换成本

用户态:当前cpu寄存器状态保存,将需要切换进来的协程cpu寄存器状态加载到cpu寄存器上。

线程切换成本

  1. 用户态和内核态的切换
  2. 内核态:操作系统调度
  3. 上下文大小:除了和协程一样的上下文,还有线程特有的栈、寄存器等,上下文比协程的大一点

内存占用

可以使用命令查看内存:

ulimit -s

Go程是否可以无限创建

go程虽然每个也就2.5KB左右,但是也不能无限创建。从我们做实验就可以得到。最终会耗尽cpu资源,导致panic

不控制go程创建引发的问题

for i:=0;i<math.Maxint64;i++{go func(i int){do ...fmt.Println("go func ",i,"go程 count = ",runtime.NumGoroutine())}(i)
}

短时间占据操作系统资源:cpu、内存、文件描述符等。使得:cpu使用率浮动上涨、内存占用上涨、主进程崩溃(被杀掉)。

简单方式控制go程创建

channel有buffer
eg: make(chan bool,3)

可以,但是需要最后阻塞,保证所有任务都结束

sync.WaitGroup
eg: 
var wg = sync.WaitGroup{}
wg.Add(1)
wg.Done()
wg.Wait()

不可以,执行的速度远小于创建的速度。因为创建和执行都没有限制速度,只是保证开启的协程全部可以完成

channel有buffer + sync.WaitGroup

可以,在2的基础上可以控制生成速度。平衡 生成和消费的速度

channel无buffer + (初始准备一定数量的协程)任务发送 和 任务执行 分离

无buffer,那么生成的速度取决于消费的速度,当有协程接收任务时才有任务被生产到chan中。消费的速度取决于我们一开始生产的协程数目

总结

主要从操作系统的层面介绍了进程、线程、协程,并以cpu切换成本的角度对比了线程和协程的区别。后面,又介绍了go是否可以无限创建的问题。并提出如何有效控制go的数量。

相关文章:

有关Groutine无限创建的分析

有关Groutine无限创建的分析 文章目录 有关Groutine无限创建的分析从操作系统分析进程、线程、协程的区别进程内存线程内存执行单元 cpu切换成本协程切换成本线程切换成本内存占用 Go程是否可以无限创建不控制go程创建引发的问题简单方式控制go程创建channel有buffersync.WaitG…...

FANUC发那科焊接机器人智能气阀

在现代工业生产中&#xff0c;焊接技术的发展日新月异&#xff0c;其中发那科&#xff08;FANUC&#xff09;焊接机器人以其高精度和稳定性受到了广泛应用。而智能气阀作为发那科焊接机器人的重要组成部分&#xff0c;在提升焊接效率和质量方面发挥着不可忽视的作用。 工作原理…...

软件架构风格系列(7):闭环控制架构

文章目录 引言一、闭环控制架构&#xff1a;让系统学会“自我调节”的魔法&#xff08;一&#xff09;从温控系统理解核心原理&#xff08;二&#xff09;核心组件解析 二、架构设计图&#xff1a;闭环控制的“四大核心环节”三、Java实战&#xff1a;手写一个智能温控系统&…...

Java合并两个列表到目标列表,并且进行排序

可以通过使用addAll()方法将两个列表合并到目标列表中。以下是实现代码&#xff1a; java 复制 下载 List<LedgerRecord> rkRecordList warehouseMapper.selectLedgerRkRecordByMaterialNo(materialNo); List<LedgerRecord> ckRecordList warehouseMapper.se…...

关于在Unity项目中使用Post Processing插件打包到web端出现的问题

关于在Unity项目中使用Post Processing插件打包到web端出现的问题 解决方法&#xff1a;是不激活摄像机上的Post Processing有关组件&#xff0c;拉低场景中的Directional Light平行光的强度进行web端打包。 &#xff08;烘焙灯光时是可以激活。&#xff09; web端支持这个Pos…...

智象科技:自动化模块驱动IT运维效能升级

智象自动化模块概览 智象科技的一站式IT运维平台中的自动化模块&#xff0c;是企业数字化转型的强大助推器。该模块集成了IT运维作业的流程编排、脚本编排&#xff0c;各类运维资源配置项目和脚本的合规巡检&#xff0c;以及基础信息、监控指标的巡检配置等自动化管理&#xff…...

GPU状态监控

GPU 状态监控 对比&#xff1a; GPU项目名称项目名称单机多 GPUGPU状态监控以时间为横轴展示GPU被占用的动态过程&#xff0c;但不显示具体时间单机多 GPUGPU 实时监控服务多卡GPU统一展示&#xff0c;数据简洁清晰多机多 GPU服务器集群监控面板可以同时监控多个服务器上的GPU…...

VS2017编译openssl3.0.8

openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、P…...

构建高效移动端网页调试流程:以 WebDebugX 为核心的工具、技巧与实战经验

现代前端开发早已不仅仅局限于桌面浏览器。随着 Hybrid 应用、小程序、移动 Web 的广泛应用&#xff0c;开发者日常面临的一个关键挑战是&#xff1a;如何在移动设备上快速定位并解决问题&#xff1f; 这不再是“打开 DevTools 查查 Console”的问题&#xff0c;而是一个关于设…...

前缀和——和为K的子数组

作者感觉本题稍稍有点难度&#xff0c;看了题解也思考了有一会TWT 显然&#xff0c;暴力我们是不可取的&#xff0c;但这里我们可以采取一种新的遍历数组形式&#xff0c;从后向前&#xff0c;也就是以i位置为结尾的所有子数组&#xff0c;这个子数组只统计i位置之前的。 然后…...

web常见的攻击方式

web攻击&#xff08;webAttack&#xff09;是针对用户上网行为或网站服务器等设备进行攻击的行为&#xff0c;如植入恶意代码、修改网站权限、获取网站用户隐私等等&#xff0c;即使是代码在的很小的bug也有可能导致隐私信息被泄漏&#xff0c;站点安全就是保护站点不受未授权的…...

为什么wifi有信号却连接不上?

WiFi有信号&#xff0c;无法连接WiFi网络的可能原因及解决方法&#xff1a; 1.长时间使用路由器&#xff0c;路由器可能会出现假死现象。重启无线路由器即可。 2.认证类型不合适。尝试更改路由器的认证类型&#xff0c;选择安全的 “WPA2-PSK” 类型模式要好&#xff0c;下面…...

CVE-2015-4553 Dedecms远程写文件

CVE-2015-4553 Dedecms远程写文件 首页 访问 http://192.168.1.3/install/index.php?step11&insLockfilea&s_langa&install_demo_name…/data/admin/config_update.php这句话会跳转到http://updatenew.dedecms.com/base-v57/dedecms/demodata.a.txt中读取内容写入…...

如何评估开源商城小程序源码的基础防护能力?

在电商行业快速发展的背景下&#xff0c;开源商城已经为更多企业或者开发者的首选方案&#xff0c;不过并不是所有的开源商城源码都能让人放心使用&#xff0c;今天就带大家一起了解下如何评估开源商城小程序源码的基础防护能力&#xff0c;帮助大家更好地筛选安全性高的商城源…...

音视频之H.265/HEVC率失真优化

H.265/HEVC系列文章&#xff1a; 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 4、音视频之H.265/HEVC变换编码 5、音视频之H.265/HEVC量化 6、音视频之H.265/HEVC环路后处理 7、音视频之H.265/HEVC熵编…...

linux安装git

[rootMiWiFi-RC06-srv rpm-gpg]# yum install git 已加载插件&#xff1a;fastestmirror Repository base is listed more than once in the configuration Repository updates is listed more than once in the configuration Repository extras is listed more than once in …...

Node 服务监控及通过钉钉推送告警提醒

背景:需要监控某个服务是否在线,运行是否正常; 实现步骤: 1、需要在项目中内置一个可以监控的健康状态接口,详情可参考之前的文章:使用 PM2 启动node服务,并添加监控接口_node pm2-CSDN博客 2、再添加另外一个进程来监控这个接口是否正常在线,然后通过钉钉推送异常消…...

健康生活指南:从日常细节开启养生之旅

在数字化与快节奏交织的时代&#xff0c;健康危机常潜伏于日常的点滴疏忽中。想要保持良好的身体状态&#xff0c;不妨从这些容易被忽视的生活细节入手&#xff0c;开启科学养生之路。​ 长期伏案工作和沉迷电子设备&#xff0c;让颈椎与腰椎承受巨大压力。调整办公环境&#…...

Node-Red通过Profinet转ModbusTCP采集西门子PLC数据配置案例

一、内容简介 本篇内容主要介绍Node-Red通过node-red-contrib-modbus插件与ModbusTCP设备进行通讯&#xff0c;这里Profinet转ModbusTCP网关作为从站设备&#xff0c;Node-Red作为主站分别从0地址开始读取10个线圈状态和10个保持寄存器&#xff0c;分别用Modbus-Read、Modbus-…...

# YOLOv4:目标检测的全新突破

YOLOv4&#xff1a;目标检测的全新突破 在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法一直以其高效的检测速度和出色的性能受到广泛关注。从最初的 YOLOv1 到如今的 YOLOv4&#xff0c;这一系列算法不断进化&#xff0c;为实时目标检测和…...

计算机视觉设计开发工程师学习路线

以下是一条系统化的计算机视觉&#xff08;CV&#xff09;学习路线&#xff0c;从基础到进阶&#xff0c;涵盖理论、工具和实践&#xff0c;适合逐步深入&#xff0c;有需要者记得点赞收藏哦&#xff1a; 相关学习&#xff1a;python深度学习&#xff0c;python代码定制 python…...

CLIP:论文阅读 -- 视觉模型

更多内容&#xff1a;XiaoJ的知识星球 目录 1.CLIP概述2.CLIP的方法2.1. 自然语言监督2.2. 创建足够大的数据集2.3. 选择有效的预训练方法2.4. 选择和缩放模型1&#xff09;CLIP模型选择&#xff1a;2&#xff09;模型缩放 2.5 训练 3.CLIP 核心伪代码3.1. CLIP伪代码3.2. CLIP…...

26、DAPO论文笔记(解耦剪辑与动态采样策略优化,GRPO的改进)

DAPO论文笔记 1、项目背景与目标2、DAPO算法与关键技术3、过长响应奖励塑形&#xff08;Overlong Reward Shaping&#xff09;**一、问题背景&#xff1a;截断惩罚的缺陷****二、解决方案&#xff1a;分层惩罚与软截断策略**1. **过长过滤&#xff1a;屏蔽无效惩罚**2. **软过长…...

【框架安装】win10 配置安装GPU加速的tensorflow和keras教程

本机配置 win10 4090&#xff0c;需要安装最后支持windows GPU加速的最后版本tensorflow2.10 重点安装命令 pip install tensorflow-gpu2.10.0 protobuf3.19.6 numpy1.23.5 pip install keras2.10.0 pip install keras-cv0.3.5 pip install tensorflow-addons0.17.1conda li…...

整合安全能力:观测云进一步强化数据价值

在 2025 年 5 月 13 日的观测云年度发布会上&#xff0c;观测云发布了 GuanceDB 3.0 全新数据引擎。这次更新标志着观测云进一步整合了云端安全能力&#xff0c;帮助用户进一步挖掘数据的价值。 全新底座&#xff1a;GuanceDB 3.0&#xff0c;数据驱动的安全基石 GuanceDB 3.…...

质检LIMS系统检测数据可视化大屏 全流程提效 + 合规安全双保障方案

在质检实验室的数字化转型浪潮中&#xff0c;「数据看得见、问题找得准、决策下得快」成为衡量管理水平的核心标准。然而传统模式下&#xff0c;检测数据分散在设备日志、纸质记录和 Excel 表格中&#xff0c;管理者如同在迷雾中摸索&#xff0c;决策失误率高达 30% 以上。 一、…...

企业销售管理痛点解析与数字化解决方案

在数字化转型浪潮中&#xff0c;传统销售模式正面临多重挑战&#xff1a; ▫️ 数据决策滞后&#xff1a;缺乏实时市场洞察&#xff0c;热销趋势依赖经验预判&#xff0c;战略响应慢半拍 ▫️ 客户管理碎片化&#xff1a;信息散存于纸质记录 / 聊天窗口&#xff0c;跟进细节遗漏…...

关于海光22DC4_2主板获取usb3.0端口信息重复问题的解决方案

需求 使用qt程序实现以下功能&#xff1a;检查主机所有usb端口是否可用&#xff0c;检查方法为&#xff1a;使用同一个3.0u盘&#xff0c;依次插入usb所有的端口&#xff0c;读取以下代码中所写的端口信息 #include <libusb-1.0/libusb.h>//只保留键鼠和u盘的设备 if (…...

GStreamer (三)常⽤插件

常⽤插件 1、Source1.1、filesrc1.2. videotestsrc1.3. v4l2src1.4. rtspsrc和rtspclientsink 2、 Sink2.1. filesink2.2. fakesink2.3. xvimagesink2.4. kmssink2.5. waylandsink2.6. rkximagesink2.7. fpsdisplaysink 3 、视频推流/拉流3.1. 本地推流/拉流3.1.1 USB摄像头3.1…...

Jenkins 使用技巧

1. 通过配置文件更改Jenkins默认端口&#xff08;8080&#xff09;&#xff1f; 这里以macos 为例来说明 Jenkins在macOS上通常通过Homebrew或类似的包管理器运行&#xff0c;这与Linux或Windows相比&#xff0c;使用了不同的配置文件布局。默认Jenkins端口8080在启动配置中是…...

Pichome 任意文件读取漏洞复现(CVE-2025-1743)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…...

Elasticsearch 深入分析三种分页查询【Elasticsearch 深度分页】

前言&#xff1a; 在前面的 Elasticsearch 系列文章中&#xff0c;分享了 Elasticsearch 的各种查询&#xff0c;分页查询也分享过&#xff0c;本篇将再次对 Elasticsearch 分页查询进行专题分析&#xff0c;“深度分页” 这个名词对于我们来说是一个非常常见的业务场景&#…...

避开封禁陷阱:动态IP在爬虫、跨境电商中的落地实践

​​1. 为什么需要动态IP&#xff1f;​​ 在日常网络操作中&#xff0c;你是否遇到过&#xff1a; ​​爬虫被封​​&#xff1a;频繁请求目标网站&#xff0c;IP被限制访问。​​跨境业务受限​​&#xff1a;某些平台对特定地区的账号有限制。​​数据采集失败​​&#x…...

公网ip是固定的吗?动态ip如何做端口映射?内网ip怎么让外网远程访问?

网络IP地址有内网与公网区分&#xff0c;公网IP同时有固定IP和动态IP之分。很多企业所用的办公网络都是公网ip&#xff0c;下载文件的速度更快&#xff0c;而且平台存储的问题可以让他人看得到&#xff0c;体验度比较好。对于无公网IP环境想要申请公网ip的用户来说&#xff0c;…...

MyBatis入门指南

查询user表中所有数据 创建user表&#xff0c;添加数据导入依赖&#xff0c;创建模块编写MyBatis核心配置文件编写SQL映射文件编写代码 定义P0J0类加载核心配置文件&#xff0c;获取SqlSessionFactory对象获取SqlSession对象&#xff0c;执行SQL语句释放资源 一、创建user表…...

GitHub排名第一的开源ERP项目:Odoo生产计划与执行的功能概述

Odoo生产计划与执行隶属于Odoo MRP与MES的运营管理解决方案。Odoo中生产计划有多种形式&#xff0c;从销售预测到销售运作计划(SOP)开始&#xff0c;到随后的主生产计划、物料需求计划(MRP)、分销需求计划(DRP)、长期生产计划&#xff0c;以及粗能力计划(RCCP)和详细能力计划。…...

使用 OpenCV 实现 ArUco 码识别与坐标轴绘制

&#x1f3af; 使用 OpenCV 实现 ArUco 码识别与坐标轴绘制&#xff08;含Python源码&#xff09; Aruco 是一种广泛用于机器人、增强现实&#xff08;AR&#xff09;和相机标定的方形标记系统。本文将带你一步一步使用 Python OpenCV 实现图像中多个 ArUco 码的检测与坐标轴…...

RAC共享存储扩容

存储工程师扩完共享存储后&#xff0c;DBA做如下操作&#xff1a; 1.主机端识别磁盘 在两个节点扫描磁盘命令 # for i in find /sys/class/scsi_host/host*; do echo - - - > $i/scan; done lsblk 2.比对确定新加的盘的uuid&#xff0c;确保uuid是一致的&#xff0c;别…...

高德地图 MCP,可用 Java SolonMCP 接入(支持 java8, java11, java17, java21)

1、MCP技术概述 1.1 什么是 MCP MCP (Model Control Protocol) 是一种允许大模型与外部工具交互的协议&#xff0c;高德地图基于此协议提供了地图服务能力&#xff0c;使 AI 大模型能够直接调用高德的 LBS。 1.2 两种接入架构对比 高德地图 MCP 提供了两种不同的接入方式&a…...

rosbag使用记录

1. 查看某个话题频率 rqt—topic 2. 查看对齐 rqt_bag...

7. 数据库技术

在数据库技术实战中&#xff0c;我们通过MySQL数据库的安装与操作&#xff0c;掌握了从创建数据库、数据表到插入、查询、更新和删除记录的全过程。借助Navicat工具&#xff0c;我们能够更直观地进行数据库管理与开发&#xff0c;提升效率。同时&#xff0c;通过JDBC技术&#…...

Python中的整型(int)和浮点数(float)

在很多初学者眼中&#xff0c;int和float不过是Python中代表整数和小数的基本类型&#xff0c;似乎只是编程语言中最“平凡”的组成部分。但在真正深入软件开发、测试乃至AI数值计算的世界后&#xff0c;你会发现&#xff0c;这两个基础类型背后隐藏着诸多重要的设计哲学、性能…...

Python元组全面解析:从入门到精通

文章目录 Python元组全面解析&#xff1a;从入门到精通一、元组的基本概念1. 什么是元组&#xff1f;2. 元组与列表的对比3. 为什么需要元组&#xff1f; 二、元组的创建方式1. 基本创建方法2. 其他创建方式 三、元组的访问与操作1. 访问元素2. 切片操作3. 元组解包 四、元组的…...

1 asyncio模块

1.1核心概念 1.1.1协程 协程是一种特殊的函数&#xff0c;可以在执行过程中暂停&#xff0c;也可以稍后恢复执行。协程通过async关键字来指定。 await关键字&#xff1a;如果想要立即执行&#xff0c;那调用协程的时候&#xff0c;前面加上await关键字。只想创建协程对象稍后…...

交通拥堵预测器(python)

这是一个基于机器学习的交通拥堵预测应用,使用随机森林算法。 功能特点: - 使用随机森林算法进行交通拥堵预测 - 直观的图形用户界面 - 支持模型训练、评估和保存/加载 - 实时预测特定时间段的拥堵程度 - 数据可视化功能(按星期分布、按时间段分布、热力图) - 支持自…...

解决服务器重装之后vscode Remote-SSH无法连接的问题

在你的windows命令窗口输入&#xff1a; ssh-keygen -R 服务器IPssh-keygen 不是内部或外部命令 .找到Git(安装目录)/usr/bin目录下的ssh-keygen.exe(如果找不到&#xff0c;可以在计算机全局搜索) 2.属性–>高级系统设置–>环境变量–>系统变量,找到Path变量&#…...

STM32实战指南:DHT11温湿度传感器驱动开发与避坑指南

知识点1【DHT11的概述】 1、概述 DHT是一款温湿度一体化的数字传感器&#xff08;无需AD转换&#xff09;。 2、驱动方式 通过单片机等微处理器简单的电路连接就能实时采集本地湿度和温度。DHT11与单片机之间采用单总线进行通信&#xff0c;仅需要一个IO口。 相对于单片机…...

使用 Terraform 创建 Azure Databricks

使用 Terraform 创建 Azure Databricks Terraform 是一种基础设施即代码(IaC)工具,允许用户通过声明式配置文件来管理和部署云资源。Azure Databricks 是一个基于 Apache Spark 的分析平台,专为数据工程和数据科学设计。通过 Terraform,可以自动化 Azure Databricks 的创…...

对话即编程:如何用 Trae 的 @智能体 5 分钟修复一个复杂 Bug?

引子&#xff1a;当新手遇到 "天书" 般的报错 作为刚加入团队的开发者&#xff0c;我在接手一个遗留的 Python 数据处理项目时&#xff0c;遇到了一个诡异报错&#xff1a; python 复制 下载 ValueError: shape mismatch: value array of shape (500,) could no…...

【工具使用】STM32CubeMX-片内Flash读写操作

一、概述 无论是新手还是大佬&#xff0c;基于STM32单片机的开发&#xff0c;使用STM32CubeMX都是可以极大提升开发效率的&#xff0c;并且其界面化的开发&#xff0c;也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片片内Flash功能的应用及其相关知识…...