-
new
Linux:线程的互斥与同步
一、买票的线程安全 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。 多个线程并发的操作共享变量,会带来一些问题。 我们模拟多个线程抢票的过程 ticket共享数据导致了数据不一致问题,这必然是和多线程访问是有关系的!而会出现多多卖三张票,肯定和--的操作有关!他是不安全的!! 问题:那么为什么全局变量的++、--操作不安全呢?? ——> --ticket 操作本身就不是一个原子操作!!经过编译器后会变成3条汇编语句:(1)内存将数据写到cpu (2)cpu进行运算 (3)cpu将数据写会内存 所以是当ticket为1的时候,刚进行完第一条汇编语句(此时--操作还没有执行),他将自己的上下文信息(此时还是1)带走,然后切换成其他线程了,所以导致ticket依旧被--(变成0),而当返回到之前那个线程的时候,他又将上下文信息恢复了(ticket恢复成1)然后又--。最后导致共享数据的线程安全问题!! 所以线程在被切换过来执行的时候,将共享数据加载到cpu的本质就是把数据的内容变成自己的上下文信息,而当被切换走的时候他会把这个信息带走(以拷贝的方式放在自己的PCB结构体中),当线程再次切换回来的时候再把上下文信息恢复过来 问题2:所以我们要怎么解决这个问题呢?? ——>对共享数据的任何访问,保证任何时候只有一个执行流访问!(需要互斥——>锁) 二、互斥量(锁) pthread_mutex_t是锁的类型 2.1 锁的接口 1、初始化互斥量(两种方法) 方法1:静态分配 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER 方法2:动态分配 int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexatt……
SE_Wang 2025-01-170 0 0 -
new
锐捷防火墙特征库升级失败
特征库升级失败 一、故障现象 防火墙特征库升级失败 二、组网拓扑 三、可能原因 防火墙没有激活授权文件 防火墙版本过低,老版本不支持部分UTM功能 防火墙未联网,离线库文件升级错误 四、处理步骤 步骤一:检查防火墙授权状态 系统管理---系统设置---授权管理界面,可查看到防火墙当前的授权状态,下图表示所有UTM功能都未授权,UTM未授权情况下,对应的特征库均无法升级。 步骤二:检查防火墙的软件版本 如果防火墙版本低于R3,需要先升级版本(设备会重启)到最新,因为R3版本之前只支持IPS功能,其他UTM功能不支持,导入授权文件的时候会报错。 步骤三:离线库升级失败 离线库下载方式:点击查看 各个类型的特征库可从下图位置分别下载并导入。 五、信息收集 1、防火墙授权信息界面截图 2、一键故障信息导出如上述步骤无法定位解决转售后处理
SE_Zhang 2025-01-170 0 0 -
new
能做链路聚合的家用路由器或解决方案,最好能便宜点的有推荐吗?
01 链路聚合(LAG)基础回顾 01 什么是链路聚合 链路聚合(LAG),也称为端口通道(Port Channel)或以太网通道(EtherChannel),是一种将多个物理网络接口捆绑成一个逻辑接口的技术。通过这种方式,可以增加带宽、提供冗余,并实现负载均衡。 链路聚合允许多个物理接口作为一个逻辑接口工作,从而提高数据传输的可靠性和效率。 标准协议: IEEE 802.3ad (LACP):动态链路聚合控制协议,用于自动协商和管理聚合组中的成员端口。 静态聚合:不需要LACP协议,手动配置聚合组中的成员端口。 02 优势 提升带宽: 将多条物理链路合并为一条逻辑链路,有效增加了总的可用带宽。 增强冗余: 如果某一条物理链路出现故障,流量会自动切换到其他正常工作的链路上,确保网络连接不中断。 负载均衡: 流量可以在聚合组内的多个物理链路上均匀分布,避免单个链路过载。 03 局限 单个交换机之间的聚合限制: 传统LAG技术只能在两台设备之间形成聚合,无法跨越多台设备实现真正的冗余。 故障切换时间较长: 当聚合组中的一条链路发生故障时,虽然有冗余机制,但故障检测和恢复过程可能需要较长时间,影响业务连续性。 配置复杂度: 在大型网络环境中,配置和管理多个LAG可能会变得复杂,尤其是当涉及到不同厂商的设备时。 02 M-LAG技术详解 01 什么是M-LAG 多链路聚合组(Multi-Link Aggregation Group, M-LAG)是一种高级链路聚合技术,它扩展了传统LAG的功能,允许多台交换机之间形成一个虚拟的链路聚合组。 通过这种方式,M-LAG不仅提升了带宽和负载均衡能力,还显著增强了网络的高可用性和冗余性。 M-LAG允许两台或多台交换机之间的多个物理接口捆绑成一个逻辑接口,从而实现跨设备的链路聚合。 应用场景: 数据中心核心层:确保核心网络的高可用性和性能。 服务器接入层:为服务器提供冗余连接,防止单点故障。 云……
SE_YJ 2025-01-174 0 0 -
new
Python编程中的两种主要的编程模式
在Python编程中,有两种主要的编程模式被广泛使用:面向过程编程(Procedural Programming) 和 面向对象编程(Object-Oriented Programming, OOP)。这两种模式各有优缺点,适用于不同的场景。 1. 面向过程编程(Procedural Programming) 面向过程编程是一种基于函数和过程的编程范式。在这种模式下,程序被组织成一系列的函数调用,这些函数按照特定的顺序执行,以实现特定的任务。 特点: 函数:程序由一系列函数组成,每个函数执行特定的任务。 线性流程:程序按照函数的调用顺序依次执行。 简单直观:对于小型和简单的任务,面向过程编程通常更直接和易于理解。 示例: def add(a, b): return a + b def subtract(a, b): return a - b def main(): x = 10 y = 5 sum_result = add(x, y) diff_result = subtract(x, y) print(f"Sum: {sum_result}, Difference: {diff_result}") if __name__ == "__main__": main() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2. 面向对象编程(Object-Oriented Programming, OOP) 面向对象编程是一种基于对象和类的编程范式。在这种模式下,程序被组织成一系列的对象,这些对象通过类来定义,并包含数据(属性)和行为(方法)。 特点: 类(Class):定义对象的蓝图,包含属性和方法。 对象(Object):类的实例,具有状态(属性)和行为(方法)。 封装(Encapsulation):隐藏对象的内部状态,只暴露必要的接口。 继承(Inheritance):允许新类继承现有类的属性和方法,实现代码重用。 多态(Polymorphism):允许不同类的对象对同一消息作出响应,实现接口的统一。 示例: class Calculator: def __init__(self, a, b): self.a = a self.b = b def add(self): return self.a + self.b def subtract(self): return self.a - self.b def main(): calc = Calculator(10, 5) s……
SE_Gai 2025-01-171 0 0 -
new
统信uos替换国内源教程
查看yum源 ls -l /etc/yum.repos.d 1.换yum源 先把原先的源备份 在根目录下个创建个目录 mkdir /yuan 复制官方源的配置文件到 yuan目录下 cp /etc/yum.repos.d/* /yuan rm -rf /etc/yum.repos.d/* 2. cd /etc/yum.repos.d 目录下执行这条命令 Rpm ivhhttps://eulerpackages.chinauos.com/servereuler/ufu/fuyu/1050/everything/x86_64/Packages/UnionTech-repos-ufu-1-2.uel20.x86_64.rpm --nodeps 3. grep gpgcheck *.repo 查看 如果gpgcheck=1,改成gpgcheck=0 cd /etc/yum.repos.d 确保在这个目录下 ls 命令查看 是否有UnionTechOS-ufu.repo这个文件 vim UnionTechOS-ufu.repo 然后修改repo文件 4.执行上面命令以后按 i 进入编辑模式 上下键 选择gpgcheck=1 把使用1修改成0 改完以后按键盘 左上角的 ESC 退出编辑模式 :wq 如果按回车Enter键保存文件 输入法切换到英文模式按住shift键打出英文冒号+wq+回车 5.yum repolist all
SE_Meng 2025-01-171 0 0 -
【Linux】深入理解文件系统(超详细)
一.磁盘 任何人根据将Linux文件系统的人,如果不给你讲磁盘,文件系统讲的再好也只是空中楼阁,因为你的大脑思考中,无法建立在无法想象的结构之中。 先看看磁盘的结构: 1-1 磁盘、服务器、机柜、机房 机械磁盘是计算机中唯⼀的⼀个机械设备 磁盘--- 外设 慢 容量⼤,价格便宜 📌补充: 关于磁盘 --- 磁铁 磁盘也只认二进制,磁盘上的二进制怎么理解呢? 因为磁盘光滑的面,我们可以把磁盘想象成上百亿的小磁铁构成,规定南北极,比如北极为1,南极为0,所有我们磁盘立马可以进行0 1保存。 📌通常网络中用高低电平,磁盘中用磁化方向来表示。以下是具体说明: 网络数据传输 在网络通信中,尤其是在有线网络中,数据通常以电信号的形式进行传输。常见的以太网标准中,就是利用电压的高低电平来表示二进制的 0 和 1。例如,在双绞线中,规定高电平代表一种逻辑状态(如 1),低电平代表另一种逻辑状态(如 0)。通过在传输线路上快速地切换高低电平,就可以实现数据的编码和传输。 磁盘数据存储 磁盘存储数据的原理是基于磁性材料的磁化特性。当磁头对盘片上的磁性材料进行写入操作时,通过控制磁头线圈中的电流方向,产生不同方向的磁场,使盘片上的磁性材料按照特定的方向被磁化。通常规定一种磁化方向代表 1,另一种磁化方向代表 0。读取数据时,磁头检测盘片上磁性材料的磁化方向,将其转换为相应的电信号,从而还原出存储的数据。 📌计算机只认二进制,这是一种宏观的说法,在不同的设备上,是由不同物理特性表现的,不同硬件,对二进制表达是不一样的!!! 📌如果有一块磁盘要进行销毁该怎么办? 不能直接进行破坏,因为可以恢复,让磁盘退磁,就可以,高温消磁!!! 1-2 磁盘存储结构 📌磁盘作为计算机中唯一的机械部件,通常由一个或多个旋转的盘片组成,每个盘片有两个面,每个面上有一层磁性材料。通过主……
SE_Wang 2025-01-166 0 0 -
锐捷VDI终端或软客户端登陆虚拟机后闪退
一、故障现象 VDI终端或软客户端连接登陆虚拟机后出现闪退现象。 二、可能原因 1、检查是否终端与服务器之间网络环境存在丢包延迟问题,或到服务器之间网络端口限制。 2、检查是否软客户端运行的PC系统环境是否存在组件服务异常或运行环境异常。 三、排查步骤 步骤一:虚拟机桌面出现闪退现象后,确认终端到服务器网络是否有丢包、延时现象,网络要求如下:VDI场景网络要求(推荐):丢包<=0.5%,延迟<=20ms,测试ping大字节数icmp包。 步骤二:软客户端使用场景,检查安装过程中是否有报错,如果有提示类似下载组件升级包失败,初始化失败等情况,可能直接影响相关服务运行,导致使用过程闪退、掉线。一般软客户端组件包不完整,是由网络环境或者电脑安全软件影响。 步骤三:如果使用过程中正常,识别到接入其他外设后突然掉线退出,可能是受外设干扰影响协议崩溃退出。可以收集服务器日志RCCP日志和终端日志进一步分析。 注意:软客户端使用场景,京东京造笔记本内置USB 网卡,点击检测USB把网卡做了重定向会出现断连闪退。 步骤四:软客户端使用场景,排查是否安全软件影响软客户端服务进程运行,在安全软件隔离区查看是否安装包程序被隔离;以及退出关闭安全软件验证使用是否正常。 步骤五:如果跨互联网SAG安全网关方案部署环境或者内外网VPN连接环境,排查两端网络设备MTU值是否过小导致软客户端连接报文传输异常。 步骤六:如果桌面云方案低于V5.4R1版本,VDI桌面突然出现掉线退到客户端登录界面,也有可能是由于 rutp证书缓存时间6个月到期影响,在web服务器上对虚机进行关机和开机操作即可恢复正常,后续升级V5.4及以上版本即可解决。 步骤七:软客户端如果固定频率掉线,且网络无明显丢包延时,可在软客户端目录下创建空文件tcp_usb,将传输模式从UDP改完TCP模式验证是否还会掉线,以此判断是……
SE_Zhang 2025-01-166 0 0 -
电脑老是重启?
01 重启有什么用? 重启,简单来说,就是将设备从当前状态关闭并重新启动,恢复到初始运行状态。这听起来像是“关机再开机”,但其实重启不仅仅是物理上的断电和通电,它涉及到更深层次的操作系统和服务的重新初始化。 01 作用: 清除临时错误:重启可以清理内存中残留的垃圾数据,让设备重新开始。 释放资源:长时间运行可能导致CPU和内存资源被过度占用,重启后可以重新分配这些资源,提高性能。 更新配置和固件:许多配置更改需要重启才能生效,例如路由表更新、安全策略调整等。 恢复默认设置:当设备陷入混乱时,重启可以将其恢复到出厂默认状态,便于重新配置。 02 重启的类型 软重启(Warm Reboot) 不完全断电,保留部分内存内容,快速重启系统。 软重启就像是让设备打了个盹儿,而不是彻底睡一觉。它可以在不完全断电的情况下迅速恢复正常操作,适合那些“只是有点迷糊”的设备。 硬重启(Cold Reboot) 完全断电后再启动,彻底清除所有缓存和临时数据。 硬重启就像是给设备洗了个冷水澡,彻底清醒过来。对于那些“彻底罢工”的设备,这是最有效的唤醒方式。 热插拔重启 某些支持热插拔的设备可以在不断电的情况下进行部分组件的重启。 热插拔重启就像是在不停电的情况下更换电池,设备可以持续工作,同时还能刷新某些部件的状态。适合那些“一边工作一边修复”的场景。 02 重启为啥这么有效? 01 清除临时错误 内存泄漏 长时间运行过程中,程序可能会占用过多内存而未及时释放,导致性能下降。这些未释放的内存块称为“内存泄漏”,最终可能导致系统资源耗尽。 进程挂起或死锁 某些进程可能因异常情况陷入无限循环或死锁状态,无法正常退出。这些进程会占用CPU和其他资源,导致系统响应变慢甚至无响应。 02 释放资源 CPU和内存资源 长时间运行可能导致CPU和内存资源被过度占用,重启后可以重新分配这些……
SE_YJ 2025-01-165 0 0 -
Docker Compose一键部署Spring Boot + Vue项目
前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) 查看Compose运行的容器 查看容器日志 关闭并删除Compose开启的容器 前提条件 熟悉Docker、Spring Boot 、Vue基本知识 熟悉yaml文件基本知识,可参考:YAML 入门教程 掌握Docker部署Spring Boot + Vue项目方法,可参考:Docker部署Spring Boot + Vue项目 概述 本文在普通的Docker部署Spring Boot + Vue项目 的基础上进行。部署若依前后端分离版项目为例,重点在于如何使用Docker Compose的方式加快项目部署过程。 此前使用Docker部署一个Spring Boot + Vue项目,包含了4个容器: MySQL Redis Java后端 Nginx前端 而稍微复杂的项目,还会有各种各样的其它中间件,需要部署的容器远不止4个。如果还像之前那样手动的逐一部署,就太麻烦了。 而Docker Compose就可以帮助我们实现 多个相互关联的Docker容器的快速部署。 Compose简介 Docker Compose 是一个用于定义和运行多容器应用程序的工具,是实现精简且高效的开发与部署体验的关键所在。 它简化了对整个应用程序栈的控制,能够通过一个易于理解的 YAML 配置文件轻松管理服务、网络和存储卷。然后,只需一条命令,就能依据配置文件创建并启动所有服务。 Docker Compose 可在所有环境中工作,包括生产、预发布、开发、测试环境以及持续集成(CI)工作流程。它还具备用于管理应用程序整个生命周期的命令,比如: 启动、停止和重建服务。 查看正在运行服务的状态。 流式输出正在运行服务的日志内容。 在某个服务上运行一次性命令。 通过使用 Docker Compose,使用一个名为 Compose 文件的 YAML 配置文件来配置应用程……
SE_Gai 2025-01-163 0 0 -
【Linux】UOS统信服务器本地yum源搭建实践
一、下载镜像 镜像下载地址:https://www.chinauos.com/resource/download-server 二、服务器配置yum mkdir -p /yum/local mount -o loop /home/iso/uos-server-20-1060a-amd64.iso /yum/local/ 安装并配置httpd # 安装httpd yum install -y httpd systemctl start httpd # 修改默认80端口为20831 vim /etc/httpd/conf/httpd.conf # 重启服务 systemctl restart httpd # 创建软连接 ln -s /yum/local/ /var/www/html/uniontechos 修改端口 安装telnet进行测试 #尝试安装 yum install telnet
SE_Meng 2025-01-166 0 0
升级版本
评论于 华为2288h v5 对iBMC上报Nand Flash预留块不足10%告警的说明