励精图治---Concurrency---吞吐量、活跃性及死锁

YOLO26算法大门区域检测+训练好的模型+285张数据集+pyqt可视化界面.zip 附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[大门(gates)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 64 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.6364** mAP50-95 | 0.4539 Precision | 0.7309 Recall | 0.6111 train/box_loss | 0.6662 train/cls_loss | 0.5916 val/box_loss | 1.3351 val/cls_loss | 1.5479 【训练过程分析】 训练过程可分成三个主要阶段:前期、中期和后期。刚开始时,模型的损失函数确实有了显著下降,box_loss 从0.6662开始,经过几轮的迭代,迅速降至0.5左右。但到了中期,loss 的下降速度明显放缓,甚至有停滞不前的趋势。这一现象在val/box_loss的表现上尤其明显,从1.3351缓慢上升至1.4左右,直到训练到64轮时才略有下降。在这一阶段,mAP50从0.6364仅轻微上升到0.64,提升有限。这期间,模型似乎陷入了平台期,进展缓慢,让人感到有些煎熬。从第30轮到第64轮,我频繁查看曲线图,希望能捕捉到一点改善的迹象,但都未能如愿。这个阶段也让我对模型的潜力产生了怀疑,担心训练过程可能需要更长时间才能看到显著改善。 进入后期阶段,尽管损失函数略有下降,但mAP50的提升并不明显,这让人感到非常... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。 立即下载

更新概念

所谓吞吐量跟活跃性:就是单位时间内,系统处理信息的数量,速度表现的结果。

所谓死锁:就是两个线程,我有你要的,你有我要的,互不相让,都等对方让出来,就死锁了。


分析情景

锁顺序死锁:所有的线程申请锁的顺序不一样,那么就存在一定概率发生死锁。

换言之,如果所有线程都以 相同的顺序来获得锁,那么在程序中就不会出现锁顺序死锁问题。


危害

死锁,小应用当然没事。如果你是商业应用的软件呢。比如淘宝,特么一个锁一天可能要上百亿次被执行。要命了这


看范例1

public class EasyDead {
    private final Object mALock = new Object();
    private final Ojbect mBLock = new Object();
    
    public void wantB(){
        synchronized(mALock) {
            synchronized(mBLock) {
                doSomethings();
            }
        }
    }
    
    public void wantA(){
        synchronized(mBLock) {
            synchronized(mALock) {
                doSomethings();
            }
        }
    }
}

在多线程情况下,同时有线程执行了wantA跟wangB,那么就会导致死锁。


看范例2---百度上有说的银行转账面试题

public void trans(Account fromAccount, Account toAccount, int money) {
    synchronized(fromAccount) {
        synchronized(toAccount) {
            if (fromAccount.getMoney() < money) {
                throws new Exception();
            } else {
                fromAccount.del(money);
                toAccount.add(money);
            }
        }
    }
}

这里如果有两个账户,同时进行存钱和取钱操作。。。那么不就卡住了。看起来不会卡。其实依旧会卡。这个环路可以弄的大一点。

这两个范例,一个是静态直观可以发现。一个是动态的。

皆因锁顺序引起。而这里的加锁顺序还是可以改变的。这并不影响


那么静态是可以弄成一样的。动态的话,就需要用一定的规则:比如说hashCode。利用System.identityHashCode来计算。按照计算后的值排序。虽然依旧有一定的概率会一样。但毕竟是小概率事件。锁顺序死锁+小概率事件===极小概率事件。大幅降低也不错。

修改修改,看范例3

private final Object mLock = new Object();

public void trans(Account fromAccount, Account toAccount, int money) {
    int from = System.identityHashCode(fromAccount);
    int to   = System.identityHashCode(toAccount);
    if(from > to) {
        synchronized(fromAccount) {
            synchronized(toAccount) {
                if (fromAccount.getMoney() < money) {
                    throws new Exception();
                } else {
                    fromAccount.del(money);
                    toAccount.add(money);
                }
            }
        }
    } else if(from < to) {
        synchronized(toAccount) {
            synchronized(fromAccount) {
                if (fromAccount.getMoney() < money) {
                    throws new Exception();
                } else {
                    fromAccount.del(money);
                    toAccount.add(money);
                }
            }
        }
    } else {
        synchronized(mLock) {//#多加一个私有锁。里头的锁顺序就不要紧了
            synchronized(toAccount) {
                synchronized(fromAccount) {
                    if (fromAccount.getMoney() < money) {
                        throws new Exception();
                    } else {
                        fromAccount.del(money);
                        toAccount.add(money);
                    }
                }
            }
        }
    }
}

这里排个序,然后针对一样的情况,再额外加个锁,吞吐也不会有大的影响。


范例4:对象间悄悄藏起来的死锁。

class A {
    private final B b;
    public A (B b) {
        this.b = b;
    }
    
    public synchronized void tellB_toDoSomething() {
        this.b.doB();
    }
    public synchronized void doA() {
        
    }
}


class B {
    private A a;
    public B(){
        a = new A(this);
    }
    public synchronized void telA_toDoSomething() {
        this.a.doA();
    }
    public synchronized void doB() {
        
    }
}

在对象间的死锁,A让B做事,A先获取自己的锁,然后获取B的锁;此时B也让A做事,B先获取自己的锁,在获取A的锁。自然又是死锁了。

这种情况也是锁顺序导致的。就是藏的比较深。


资源死锁

之前说,如果Executors之间有线程依赖的。那么,我们会扩大线程池也需要慎重考虑超时策略。

这里就存在一个,线程饥饿等待的情况。就是资源死锁了。

另外,在线程池满的情况下,所有新任务进入等待状态,如果一个线程需要两个资源,另一个线程也需要这两个资源,也存在死锁。


解决策略

1.超时。设置锁超时,超时就释放

2.通过dump log分析,我们的程序应该都是有追踪的嘛。上传log到服务器。我们好分析

3.轮询策略。但是这很可能会损耗CPU资源。不断的访问。这终究是个下策。

4.设置线程优先级,Thread Priority还是很有意思的。有了优先级。会有改善。

5.轮询策略的失败会导致活锁

活锁,就是其实也是锁,就是不断的访问,不会完全锁死。但是这会消耗很大的资源。每次失败后都会重试。----------策略。每次失败后的重试时间随机化。


小结

死锁的存在不仅降低了稳定性。也影响的吞吐量活性。要谨慎。死锁一般是又加锁顺序不一致导致的。一旦不一致就会产生求之而不得,不得则等待的情况。也就死锁了。

不到一定有需要尽量不要使用锁。开放调用更易进行死锁分析。

同时,如果要使用锁,那么要尽量减少锁代码块。越少越好。动不动就保护一整块不合适。





状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现) 内容概要:本文围绕非线性状态估计中的三种经典滤波算法——无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)展开系统性学习与研究,重点在于通过Matlab编程实现这些算法的核心流程,并将其应用于实际系统的状态估计问题中。文档不仅详细阐述了各算法的数学原理、适用条件与性能差异,还提供了完整的仿真代码与案例分析,帮助读者深入理解其在非线性、非高斯环境下的表现特性。同时,资源拓展至EKF与神经网络融合训练、多源数据融合等高级应用场景,展现了其在智能控制、无人机导航、电力系统状态估计、目标跟踪等领域的广泛应用价值。; 适合人群:具备一定信号处理、控制理论或状态估计基础的研究生、科研人员及工程技术人员,尤其适用于从事自动化、机器人、导航、电力电子与智能系统等相关方向的研究与开发工作者;; 使用场景及目标:① 掌握UKF、EKF与PF在非线性系统中的建模思路与Matlab实现方法,理解其优缺点与适用边界;② 提升科研仿真能力,能够独立构建状态估计模型并进行算法对比验证;③ 将所学方法应用于如电池SOC估算、无人机姿态估计、传感器融合、故障诊断等实际工程问题中;; 阅读建议:建议结合Matlab动手实践,逐行解读并调试所提供的代码,深入理解算法实现细节;同时可延伸学习文中提及的数据融合、神经网络与滤波器结合等进阶主题,以构建完整的状态估计技术知识体系。 立即下载

相关推荐

Plecs全桥LLC谐振变换器仿真模型

内容概要:本文档系统性地整合了电力电子与控制系统仿真领域的丰富资源,聚焦于基于Plecs和Simulink平台的高频软开关变换器建模与仿真,涵盖全桥LLC、双向CLLC、DAB、PFC、Vienna整流器、Buck-Boost等多种典型拓扑结构。资源内容不仅包括闭环控制(如变频控制、移相混合控制、双闭环、恒压恒流双竞争控制)的仿真模型,还配套提供详细的参数设计报告、Mathcad计算书、PPT说明文档及参考文献,构建了从理论建模到工程实现的完整技术链条。此外,文档拓展至状态估计(如卡尔曼滤波、EKF、UKF、PF)与智能算法(如BP神经网络、模型预测控制)在电力系统中的融合应用,为先进控制策略的研究与复现提供了坚实支撑。; 适合人群:面向具备电力电子、自动控制或电气工程等相关专业背景,熟练掌握MATLAB/Simulink/Plecs等仿真工具,从事高频开关电源、新能源变换系统、储能系统或车载电源研发的研究生、高校科研人员及企业工程技术人员。; 使用场景及目标:① 学习并掌握全桥LLC等谐振变换器的核心工作原理与闭环控制系统设计方法,特别是变频与移相控制策略的实现细节;② 利用提供的仿真模型与Mathcad计算工具,快速完成实际项目中的参数设计、性能验证与优化迭代;③ 结合状态估计算法与神经网络等智能方法,开展电力电子系统状态观测、故障诊断或控制策略创新等前沿科研课题的复现与探索。; 阅读建议:建议严格按照资源目录结构循序渐进地查阅,优先下载并运行核心仿真模型,结合对应的设计报告与计算书深入理解其建模逻辑与参数推导过程,重点关注闭环控制架构、软启动策略及中点电位平衡等关键技术环节,并可进一步将状态估计与智能算法模块融入现有模型,探索其在系统优化中的应用潜力。

讨论C#中的并发性能测试和调试⼯具,以及它们在多线程编程中的作⽤

多线程和并发编程中,性能测试和调试是确保代码正确性和优化性能的关键环节。并发代码的调试难度较高,因为多个线程的执行顺序不确定,容易出现。通过这些工具和方法,开发者可以更高效地编写、测试和优化并发代码,解决多线程环境中的复杂问题。幸运的是,C# 提供了多种工具和方法帮助开发者进行并发性能测试和调试。能帮助我们准确衡量并发代码的性能差异。

fapw15的博客 1225

【扩展卡尔曼滤波器EKF】基于UWB雷达的SLAM能够在室内环境内映射自然点地标,并改善机器人定位(Matlab代码实现)

内容概要:本文介绍了基于Plecs软件构建的全桥LLC谐振变换器仿真模型,重点围绕LLC谐振变换器的工作原理、建模方法与仿真设计展开。该模型可用于研究全桥LLC在软开关条件下的动态响应特性、效率优化及参数设计,涵盖谐振频率调节、变频控制策略、电压增益特性等关键技术内容,帮助深入理解LLC拓扑在高频高效电源转换中的应用。; 适合人群:具备电力电子基础知识,从事电源设计、新能源变换系统研发的工程师及研究生。; 使用场景及目标:①用于教学与科研中对LLC谐振变换器工作模态的分析;②辅助完成高性能DC-DC变换器的参数设计与控制策略验证;③支持对软开关技术、谐振网络优化等方面的深入研究; 阅读建议:建议结合其他LLC相关设计资料与仿真工具(如Simulink)进行对比学习,重点关注谐振参数选取与仿真波形分析,以提升对实际工程问题的解决能力。

Java基础-深拷贝和浅拷贝的区别

最近这段时间太忙了。以至于之前一篇博文没办法写下去。 趁着今天早上有1个半小时的空闲,写一篇 深拷贝与浅拷贝   为什么要拷贝? Java克隆是为了得到一个 完全一致的对象。 相同点:对象完全一样。这包括里头所有的变量,对象。 不同点:对象的内存地址不一样。   深拷贝与浅拷贝 一般来说,拷贝的类型分为 深拷贝与浅拷贝。 |———————————————————————————

王学明 8073

液态神经网络系列(四) | 一条 PyTorch 从零搭建 LTC 细胞

本文详细介绍了如何从零开始用PyTorch实现Liquid Time-constant Networks(LTC)神经元模型。首先将LTC的核心微分方程拆解为输入电导、系统时间常数和数值积分器三个模块,然后逐步构建LTCCell类,包括物理参数初始化、突触参数设置和前向演化过程。文章还展示了如何封装LTCModel处理不规则时间序列,并通过正弦波抗干扰实验验证了LTC模型的优越性。最后讨论了数值稳定性、计算代价等实现细节,并预告了下一篇将探讨使用伴随灵敏度算法优化显存占用的方法。

wyj333333的博客 2063

SEG-Y 数据介绍及读写

无

1万+

自动时区和自动时间的实现

两个概念: 1.NITZ(network identity and time zone)同步时间 NITZ是一种GSM/WCDMA基地台方式,必须插入SIM卡,且需要operator支持;可以提供时间和时区信息 中国大陆运营商基本是不支持的 2.NTP(network time protocol)同步时间 NTP在无SIM卡或operator不支持NITZ时使用,单纯通过网络(G

王学明 3939

黑客渗透测试后门隐藏技术揭秘

本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。

m0_60781580的博客 1040

这样才是写工具类

什么是工具类? 这种 低级的问题还问的出来。 最近我发现 好多东西都是一看就懂。然而,自己不知道什么时候就能写出 shi 一样的代码。 这是因为编码时的构思,没有明确下来,构思不清晰,就相当于地基不稳。 接下来,我们以 TimeUtil为例讲解我的思考。 TimeUtils编码时的考量 偶然的一次CodeReview,发现TimeUtils竟然不知道什么时候,变乱了。 我知道 我该重构了。可是...

王学明 3840

基于rms包的限制性立方样条回归(RCS)R代码实现

RCS

2301_79584199的博客 2万+

人工势场法在自动驾驶避障中的实践与优化

本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。

weixin_29208327的博客 927

分享JSON解析小心得

一个良好的编码习惯,最少要能让编写意图 跟 编写结果 保持一致。 这里{}是对象,"{}"就是字符串,当你用"" 去扩 {},那是 将 对象 改变成 字符串。 这显然是编程意图的不明确导致。 表面上看,一点问题都没有,实际上,确确实实的违背了数据格式在设计时的初衷。。。 坚持实体化,坚持JSON数据格式的统一,坚持使用JSON生产工具

王学明 1776

CRC校验查表法详解

CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m

boom的博客 1万+

对市场上两款人脸识别工具的评判

市场上的两个方案 1. 一登人脸识别 简介:一登人脸识别致力于人脸识别登录的一体化解决方案。有28家合作商,比较知名的是乐视、个推等。 主要方式:一登刷脸的准确性依赖于  人脸识别度以及手机号码。少了手机号码,识别度就会大幅降低。我使用我自己的手机出现了一次,一次都没有成功登录的情况。识别度还是需要增加的。 技术难度:一登识别由于是一体化解决方案,所有具体实现细节绝对是不可能放开的。同时,

王学明 1660

TypeError: XGBClassifier.fit() got an unexpected keyword argument ‘early_stopping_rounds‘ 解决方案

本文主要介绍了TypeError: XGBClassifier.fit() got an unexpected keyword argument 'early_stopping_rounds’解决方案,希望能对使用XGBoost的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

上位机图像处理和嵌入式模块部署(qmacvisual入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 虽然我们前面学习了很多的知识点,比如说在windows这边,用qt写界面,用opencv写图像处理代码;在linux这边先用树莓派测试,最后再部署到自己的平台上面。但是,对于一个商业软件是怎么运行的,很多时候我们心理还是没有底,或者说,自己写的软件距离一个商业软件还有多远,大部分学习的同学是不知道的。 就算有的同学说,这个时候可以借鉴一下vision pro,或者是

嵌入式-老费,一个分享专业嵌入式知识的blog 1229

Handler、HandlerThread、Thread的区别

留空

王学明 1523

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Service 详解

翻译一下Service.java的API文档----哎哟,我去,公司终于可以发文章了   简介 service是应用相关组件,主要用于应用要做一个长时间运行的动作,或者不需要跟用户交互或为其他应用提供功能。每一个service,都必须在AndroidManafest.xml中定义, 一个service,通过Context.startService()或Context.bindService

王学明 1421

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

绞尽脑汁,给代码取个好名字

好名字胜却注释万千我的名字会告诉你一切不要误导写能体现作者意图的名字看的懂,还读的出来能力体现在名字里接口和实现类的命名有两套规则:明确才是王道类名、对象名方法名insert能不能 改用add?如果你无法命名,那就想想你能不能用专业领域的名称创造语境 我的名字会告诉你一切 范例一 int n; //个人统计 n是一个无意义的。它没有任何个数的概念。通过注释,你或许能得到一点信息。但是,如果要通过注释来解释这个变量。那这个变量的名字就是有问题的。 我们应该指明 计量的对象和单位的名称: int perso.

王学明 1336

[利其器]优雅如斯的反射工具: JOOR

JDK的反射api代码又长又难用。 JOOR的目标 便是 简化 JDK反射API。 JOOR是java.lang.reflect包的一个简单包装器。 先看一个范例 这是我用反射实现的一个全局配置部分代码 Class parentClass = object.getClass(); WinConfig annotation = (WinConfig) parentClass.getAnnot...

王学明 928

JAVA命名规范

这篇文章由同事整理,我稍微调整了下格式 类的命名(单词首字母大写) ①  Java类名通常以大写字母开头,如果类名称由多个单词组成,则每个单词的首字母均应为大写,例如TestPage 。 ②  如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,例如:XMLExample 。 ③  由于类是设计用来代表对象的,所以在命名类时应尽量选择名词 。 ④  减少类名中缩

王学明 868

小白搭建ngrok完全手册

搭建ngrok完全手册用途你要准备这些功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 用途 ngrok 将本地服务映射到公网。 本地开发了一个服务,希望能给开发的同事使用,但又不想部署在服务器。 开发微信公众号,必须要有个公网的

王学明 844

[Think more, Code less]无招胜有招 - 忘记规范,代码更规范

系统越大,维护成本越高,这几乎是放之四海而皆准的真理。 其中一个原因:代码质量参差不齐。 持续优化代码、提高代码质量,是提供系统生命力的一个有效手段之一。 Think more, code less(思考越多,编码越少) 本文总结了 General:通用 Equal:平衡 Short\Small:简短 Simple:简单 GESSS原则 书面的表述: 短小精悍,平衡通用 李连杰演的神教教主,...

王学明 843

基于JDK1.7的Java反射效率研究

前言 近来发现,不少框架基于Java反射进行,根据以往的说法,是反射效率不高,但Java版本迭代,优化到什么程序。还是需要自己亲自研究一下。 测试环境:Eclipse + JDK1.7 + i5-4460\8G\64位Win10.ben 测试方案:10次操作汇总的时间 公共源码: public class reflection_TestClass { private int

王学明 801

励精图治---Concurrency---ThreadPoolExecutor最详

心情不好,不适合写博客。今天开篇。周末完成它。唉我的妈呀。这个世界怎么了?

王学明 766

网络相关记录-NAT穿透

----------------------------------------------------------- 信息大爆炸,记不住的时候,就记录一下 ----------------------------------------------------------- 背景简介 Internet暴涨,可用IP地址不足,路由表不断增大。于是就诞生了NAT穿透 NAT穿透技术简介

王学明 744
上一篇: 励精图治---Concurrency---GUI设计
下一篇: 励精图治---Concurrency---为什么要有线程
手艺人王学明
手艺人王学明 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄17年 441粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值