【1】基于多设计模式下的同步&异步日志系统-项目介绍

1. 项目介绍

本项⽬主要实现⼀个日志系统, 其主要支持以下功能:
• 支持多级别日志消息
• 支持同步日志和异步日志
• 支持可靠写⼊日志到控制台、文件以及滚动文件中
• 支持多线程程序并发写日志
• 支持扩展不同的日志落地⽬标地

2. 开发环境

• CentOS 7
• vscode/vim
• g++/gdb
• Makefile

3. 核心技术

• 类层次设计(继承和多态的应用)
• C++11(多线程、auto、智能指针、右值引用等)
• 双缓冲区
• 生产消费模型
• 多线程
• 设计模式(单例、工厂、代理、模板等)

4. 环境搭建

本项⽬不依赖其他任何第三方库, 只需要安装好CentOS/Ubuntu + vscode/vim环境即可开发。

5. 日志系统介绍

5.1 为什么需要日志系统

• 生产环境的产品为了保证其稳定性及安全性是不允许开发人员附加调试器去排查问题, 可以借助日志系统来打印⼀些日志帮助开发人员解决问题
• 上线客⼾端的产品出现bug无法复现并解决, 可以借助日志系统打印日志并上传到服务端帮助开发人员进行分析
• 对于⼀些高频操作(如定时器、心跳包)在少量调试次数下可能无法触发我们想要的行为,通过断点的暂停方式,我们不得不重复操作⼏⼗次、上百次甚⾄更多,导致排查问题效率是⾮常低下,可以借助打印日志的方式查问题
• 在分布式、多线程/多进程代码中, 出现bug⽐较难以定位, 可以借助日志系统打印log帮助定位bug
• 帮助⾸次接触项⽬代码的新开发人员理解代码的运行流程

5.2 日志系统技术实现

日志系统的技术实现主要包括三种类型:
• 利用printf、std::cout等输出函数将日志信息打印到控制台
• 对于⼤型商业化项⽬, 为了方便排查问题,我们⼀般会将日志输出到文件或者是数据库系统方便查询和分析日志, 主要分为同步日志和异步日志方式
◦ 同步写日志
◦ 异步写日志

5.2.1 同步写日志

同步日志是指当输出日志时,必须等待日志输出语句执行完毕后,才能执行后⾯的业务逻辑语句,日志输出语句与程序的业务逻辑语句将在同⼀个线程运行。每次调用⼀次打印日志API就对应⼀次系统调用write写日志文件。

在这里插入图片描述

在高并发场景下,随着日志数量不断增加,同步日志系统容易产生系统瓶颈:
• ⼀方⾯,⼤量的日志打印陷⼊等量的write系统调用,有⼀定系统开销.
• 另⼀方⾯,使得打印日志的进程附带了⼤量同步的磁盘IO,影响程序性能

5.2.2 异步写日志

异步日志是指在进行日志输出时,日志输出语句与业务逻辑语句并不是在同⼀个线程中运行,⽽是有
专⻔的线程用于进行日志输出操作。业务线程只需要将日志放到⼀个内存缓冲区中不用等待即可继续执行后续业务逻辑(作为日志的生产者),⽽日志的落地操作交给单独的日志线程去完成(作为日志的消费者), 这是⼀个典型的生产-消费模型。

在这里插入图片描述

这样做的好处是即使日志没有真的地完成输出也不会影响程序的主业务,可以提高程序的性能:
• 主线程调用日志打印接口成为⾮阻塞操作
• 同步的磁盘IO从主线程中剥离出来交给单独的线程完成

  • 39
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工业电子元件开源系统是一款开源的THinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统易优cms。 工业电子元件开源系统秉承了易优CMS的先进设计理念,并且专注于工业。 工业电子元件开源系统特点: 简单方便 工业电子元件开源系统安装十分方便,只需输入域名,然后再点两次鼠标,期间填入一些必要的安装信息就可以轻松完成整个安装过程。 使用十分便捷,安装后进后台,无需事先进行任何设置操作。 要进行网站设置也十分简单,几分钟就可以完成。 工业电子元件开源系统功能介绍: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多语言版(后台一键开启) 8、插件功能 9、多语言功能 10、水印功能 工业电子元件开源系统安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.1 及以上 本地电脑推荐使用PHPstudy安装,及安装在合适的网站空间、虚拟主机上。 默认后台 域名/login.php 工业电子元件开源系统更新日志: 1、[安全]修复已知存在的安全漏洞; 2、[新增]广告位置的多种类型,适用于片碎化管理; 3、[新增]批量新增Tag标签的功能; 4、[新增]发布/编辑视频文档时,支持批量导入视频链接的功能; 5、[新增]内置腾讯云COS对象存储的逻辑,可以安装COS插件使用; 6、[新增]内置升级模式,可选择升级新版本,也可选择只升级安全补丁; 7、[新增]整点秒杀、优惠券(仅限于可视化商城小程序插件内使用); 8、[新增]商品评价功能,请参考comment标签手册(仅限于专业版商业授权); 9、[新增]商城退换货售后处理(仅限于专业版商业授权); 10、[新增]内置问答悬赏模型(仅限于专业版商业授权); 11、[优化]后台更多功能加入到管理员权限控制里; 12、[优化]tag列表页不存在的URL直接显示404; 13、[优化]后台会员列表支持用户名或昵称搜索; 14、[优化]前台列表页调用arclist标签后,不会生成多余的分页静态文件; 15、[优化]管理员可以预览待审核稿件的逻辑,保护内容隐私被盗取; 16、[优化]插件内置升级前后置方法,便于更好的插件在线升级; 17、[优化]后台更多功能新增通知管理入口; 18、[优化]后台栏目支持上级移动,栏目保持最多3级的逻辑; 19、[优化]后台商品规格的规格值支持是否同步更新; 20、[优化]多图上传的用户体验; 21、[优化]广告管理逻辑体验; 22、[修复]在IE系列浏览器中,会员升级支付无法进行; 23、[修复]样式影响了留言导出按钮被隐藏; 24、[修复]微站点开启之后,手机端会员中心无法退出的问题; 25、[修复]回收站还原文档报错的问题; 26、[修复]视频模型发布文档时不显示编辑器的问题; 27、[修复]部分前台模板的手机端收藏弹窗的兼容性; 28、[修复]后台编辑会员时,没有邮箱或手机属性时报错; 29、[修复]微信支付支持异步回调,确保用户行为中断不影响业务自动处理; 30、[修复]后台站内信通知删除报错的问题; 31、[修复]做了一些已知问题的修正和完善;
建筑设计行业绿色风格整站源码是一款开源的THinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统易优cms。 建筑设计行业绿色风格整站源码秉承了易优CMS的先进设计理念,并且专注于旧物回收。 建筑设计行业绿色风格整站源码使用十分便捷,便捷到您只需直接开始发布旧物回收就可以了。  建筑设计行业绿色风格整站源码特点: 简单方便 建筑设计行业绿色风格整站源码安装十分方便,只需输入域名,然后再点两次鼠标,期间填入一些必要的安装信息就可以轻松完成整个安装过程。 使用十分便捷,安装后进后台,直接写旧物回收内容就可以了,无需事先进行任何设置操作。 要进行网站设置也十分简单,几分钟就可以完成。 建筑设计行业绿色风格整站源码功能介绍: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多语言版(后台一键开启) 8、插件功能 9、多语言功能 10、水印功能 建筑设计行业绿色风格整站源码安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.1 及以上 本地电脑推荐使用PHPstudy安装,及安装在合适的网站空间、虚拟主机上。 默认后台 域名/login.php 建筑设计行业绿色风格整站源码更新日志: bulid2041 1、[安全]修复已知存在的安全漏洞; 2、[新增]广告位置的多种类型,适用于片碎化管理; 3、[新增]批量新增Tag标签的功能; 4、[新增]发布/编辑视频文档时,支持批量导入视频链接的功能; 5、[新增]内置腾讯云COS对象存储的逻辑,可以安装COS插件使用; 6、[新增]内置升级模式,可选择升级新版本,也可选择只升级安全补丁; 7、[新增]整点秒杀、优惠券(仅限于可视化商城小程序插件内使用); 8、[新增]商品评价功能,请参考comment标签手册(仅限于专业版商业授权); 9、[新增]商城退换货售后处理(仅限于专业版商业授权); 10、[新增]内置问答悬赏模型(仅限于专业版商业授权); 11、[优化]后台更多功能加入到管理员权限控制里; 12、[优化]tag列表页不存在的URL直接显示404; 13、[优化]后台会员列表支持用户名或昵称搜索; 14、[优化]前台列表页调用arclist标签后,不会生成多余的分页静态文件; 15、[优化]管理员可以预览待审核稿件的逻辑,保护内容隐私被盗取; 16、[优化]插件内置升级前后置方法,便于更好的插件在线升级; 17、[优化]后台更多功能新增通知管理入口; 18、[优化]后台栏目支持上级移动,栏目保持最多3级的逻辑; 19、[优化]后台商品规格的规格值支持是否同步更新; 20、[优化]多图上传的用户体验; 21、[优化]广告管理逻辑体验; 22、[修复]在IE系列浏览器中,会员升级支付无法进行; 23、[修复]样式影响了留言导出按钮被隐藏; 24、[修复]微站点开启之后,手机端会员中心无法退出的问题; 25、[修复]回收站还原文档报错的问题; 26、[修复]视频模型发布文档时不显示编辑器的问题; 27、[修复]部分前台模板的手机端收藏弹窗的兼容性; 28、[修复]后台编辑会员时,没有邮箱或手机属性时报错; 29、[修复]微信支付支持异步回调,确保用户行为中断不影响业务自动处理; 30、[修复]后台站内信通知删除报错的问题; 31、[修复]做了一些已知问题的修正和完善;
易优企业官网系统是一款开源的THinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统易优cms。 易优企业官网系统秉承了易优CMS的先进设计理念,并且专注于企业。 易优企业官网系统特点: 简单方便 易优企业官网系统安装十分方便,只需输入域名,然后再点两次鼠标,期间填入一些必要的安装信息就可以轻松完成整个安装过程。 使用十分便捷,安装后进后台,无需事先进行任何设置操作。 要进行网站设置也十分简单,几分钟就可以完成。 易优企业官网系统功能介绍: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多语言版(后台一键开启) 8、插件功能 9、多语言功能 10、水印功能 易优企业官网系统安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.1 及以上 本地电脑推荐使用PHPstudy安装,及安装在合适的网站空间、虚拟主机上。 默认后台 域名/login.php 易优企业官网系统更新日志: 1、[安全]修复已知存在的安全漏洞; 2、[新增]广告位置的多种类型,适用于片碎化管理; 3、[新增]批量新增Tag标签的功能; 4、[新增]发布/编辑视频文档时,支持批量导入视频链接的功能; 5、[新增]内置腾讯云COS对象存储的逻辑,可以安装COS插件使用; 6、[新增]内置升级模式,可选择升级新版本,也可选择只升级安全补丁; 7、[新增]整点秒杀、优惠券(仅限于可视化商城小程序插件内使用); 8、[新增]商品评价功能,请参考comment标签手册(仅限于专业版商业授权); 9、[新增]商城退换货售后处理(仅限于专业版商业授权); 10、[新增]内置问答悬赏模型(仅限于专业版商业授权); 11、[优化]后台更多功能加入到管理员权限控制里; 12、[优化]tag列表页不存在的URL直接显示404; 13、[优化]后台会员列表支持用户名或昵称搜索; 14、[优化]前台列表页调用arclist标签后,不会生成多余的分页静态文件; 15、[优化]管理员可以预览待审核稿件的逻辑,保护内容隐私被盗取; 16、[优化]插件内置升级前后置方法,便于更好的插件在线升级; 17、[优化]后台更多功能新增通知管理入口; 18、[优化]后台栏目支持上级移动,栏目保持最多3级的逻辑; 19、[优化]后台商品规格的规格值支持是否同步更新; 20、[优化]多图上传的用户体验; 21、[优化]广告管理逻辑体验; 22、[修复]在IE系列浏览器中,会员升级支付无法进行; 23、[修复]样式影响了留言导出按钮被隐藏; 24、[修复]微站点开启之后,手机端会员中心无法退出的问题; 25、[修复]回收站还原文档报错的问题; 26、[修复]视频模型发布文档时不显示编辑器的问题; 27、[修复]部分前台模板的手机端收藏弹窗的兼容性; 28、[修复]后台编辑会员时,没有邮箱或手机属性时报错; 29、[修复]微信支付支持异步回调,确保用户行为中断不影响业务自动处理; 30、[修复]后台站内信通知删除报错的问题; 31、[修复]做了一些已知问题的修正和完善;
设计思路: 本设计采用STC89C51单片机作为控制核心,实现对三相异步电机的星-△启动控制。利用单片机的IO口控制三相继电器,实现对电机的启动和停止控制。同时,采用AD转换器对电机的电流进行采样,通过单片机的模拟输入端口进行数字化处理,实现对电机的过载保护。 设计流程: 1. 确定硬件电路结构 三相异步电机星-△启动控制器的硬件电路结构如下图所示: ![image-20211209102046692](https://i.loli.net/2021/12/09/SyLpFJ7kNlDnOcV.png) 其中,K1、K2、K3为三相继电器,用于控制电机的启动和停止;R1、R2、R3为电流采样电阻,用于采集电机的电流信号;V1为电机供电电源,U、V、W为电机三相输入端口。 2. 程序设计 程序设计分为三个部分:启动控制、停止控制、过载保护。其中,启动控制和停止控制通过单片机的IO口对三相继电器进行控制,实现对电机的启动和停止控制;过载保护通过AD转换器采样电机的电流信号,通过单片机的模拟输入端口进行数字化处理,实现对电机的过载保护。 启动控制: ```c void start_motor() { P2 &= 0xf8; //P2.0-P2.2清零,用于控制三相继电器 P2 |= 0x01; //P2.0置1,控制K1继电器闭合,使U相与电源相连 delay(1000); //延时1s,使电机加速到稳定运行状态 P2 &= 0xf8; //P2.0-P2.2清零 P2 |= 0x02; //P2.1置1,控制K2继电器闭合,使V相与电源相连 delay(1000); //延时1s,使电机加速到稳定运行状态 P2 &= 0xf8; //P2.0-P2.2清零 P2 |= 0x04; //P2.2置1,控制K3继电器闭合,使W相与电源相连 delay(1000); //延时1s,使电机加速到稳定运行状态 } ``` 停止控制: ```c void stop_motor() { P2 &= 0xf8; //P2.0-P2.2清零,用于控制三相继电器 P2 |= 0x04; //P2.2置1,控制K3继电器闭合,使W相断开 delay(1000); //延时1s,使电机减速到停止状态 P2 &= 0xf8; //P2.0-P2.2清零 P2 |= 0x02; //P2.1置1,控制K2继电器闭合,使V相断开 delay(1000); //延时1s,使电机减速到停止状态 P2 &= 0xf8; //P2.0-P2.2清零 P2 |= 0x01; //P2.0置1,控制K1继电器闭合,使U相断开 delay(1000); //延时1s,使电机减速到停止状态 } ``` 过载保护: ```c void overload_protect() { while(1) { ADC_CONTR = 0x98; //启动AD转换器 while(!(ADC_CONTR & 0x20)); //等待转换完成 if(ADC_RES > 0x80) //判断电机电流是否超过额定电流 { stop_motor(); //停止电机运行 break; } } } ``` 3. 编写测试程序 编写测试程序,包括启动电机、停止电机、过载保护等功能。 ```c #include<STC89C5X.h> void delay(unsigned int count) //延时函数 { unsigned int i,j; for(i=0;i<count;i++) for(j=0;j<120;j++); } void start_motor(); //启动电机 void stop_motor(); //停止电机 void overload_protect(); //过载保护 void main() { while(1) { start_motor(); //启动电机 delay(5000); //延时5s overload_protect(); //过载保护 delay(5000); //延时5s stop_motor(); //停止电机 delay(5000); //延时5s } } ``` 4. 烧录程序 将程序烧录进STC89C51单片机中,连接电路,即可进行测试。 总结: 本设计通过STC89C51单片机控制三相继电器,实现对三相异步电机的星-△启动控制。同时,通过AD转换器采样电机的电流信号,实现对电机的过载保护。该设计具有结构简单、功能实用、可靠性高等特点,适用于三相异步电机的启动控制和过载保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值