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

如何做影视网站的标题网页无法访问的原因

如何做影视网站的标题,网页无法访问的原因,活动策划公司网站,什么网站可以做动图基于多设计模式下的同步异步日志系统 代码链接#xff1a;https://github.com/Janonez/Log_System 1. 项目介绍 本项目主要实现一个日志系统#xff0c; 其主要支持以下功能#xff1a; 支持多级别日志消息支持同步日志和异步日志支持可靠写入日志到标准输出、文件…基于多设计模式下的同步异步日志系统 代码链接https://github.com/Janonez/Log_System 1. 项目介绍 本项目主要实现一个日志系统 其主要支持以下功能 支持多级别日志消息支持同步日志和异步日志支持可靠写入日志到标准输出、文件以及滚动文件中支持多线程程序并发写日志支持扩展不同的日志落地目标地 2. 开发环境 CentOS 7VSCode/vimg/gdbMakefile 3. 核心技术 类层次设计继承和多态的应用C11多线程、auto、智能指针、右值引用等双缓冲区生产消费模型多线程设计模式单例、工厂、代理、模板等 4. 日志系统介绍 4.1 为什么需要日志系统 生产环境的产品为了保证其稳定性及安全性是不允许开发人员附加调试器去排查问题 可以借助日志系统来打印一些日志帮助开发人员解决问题上线客户端的产品出现bug无法复现并解决 可以借助日志系统打印日志并上传到服务端帮助开发人员进行分析对于一些高频操作如定时器、心跳包在少量调试次数下可能无法触发我们想要的行为通过断点的暂停方式我们不得不重复操作几十次、上百次甚至更多导致排查问题效率是非常低下 可以借助打印日志的方式查问题。在分布式、多线程/多进程代码中 出现bug比较难以定位 可以借助日志系统打印log帮助定位bug帮助首次接触项目代码的新开发人员理解代码的运行流程 4.2 日志系统技术实现 日志系统的技术实现主要包括三种类型: 利用printf、std::cout等输出函数将日志信息打印到控制台对于大型商业化项目 为了方便排查问题我们一般会将日志输出到文件或者是数据库系统方便查询和分析日志 主要分为同步日志和异步日志方式 4.2.1 同步写日志 同步日志是指当输出日志时必须等待日志输出语句执行完毕后才能执行后面的业务逻辑语句日志输出语句与程序的业务逻辑语句将在同一个线程运行。每次调用一次打印日志API就对应一次系统调用write写日志文件。 在高并发场景下随着日志数量不断增加同步日志系统容易产生系统瓶颈 一方面大量的日志打印陷入等量的write系统调用有一定系统开销。另一方面使得打印日志的进程附带了大量同步的磁盘IO影响程序性能。 4.2.2 异步写日志 异步日志是指在进行日志输出时日志输出语句与业务逻辑语句并不是在同一个线程中运行而是有专门的线程用于进行日志输出操作。业务线程只需要将日志放到一个内存缓冲区中不用等待即可继续执行后续业务逻辑作为日志的生产者而日志的落地操作交给单独的日志线程去完成作为日志 的消费者, 这是一个典型的生产-消费模型。 这样做的好处是即使日志没有真的地完成输出也不会影响程序的主业务可以提高程序的性能 主线程调用日志打印接口成为非阻塞操作同步的磁盘IO从主线程中剥离出来交给单独的线程完成 5. 日志系统框架设计 将一条消息进行格式化成为指定格式的字符串后写入到指定位置 本项目实现的是一个多日志器日志系统主要实现的功能是让程序员能够轻松的将程序运行日志信息落地到指定的位置且支持同步与异步两种方式的日志落地方式。 5.1 模块划分 日志等级模块对输出日志的等级进行划分以便于控制日志的输出并提供等级枚举转字符串功能。日志消息模块中间存储日志输出所需的各项要素信息日志消息格式化模块设置日志输出格式并提供对日志消息进行格式化功能。日志消息落地模块决定了日志的落地方向可以是标准输出也可以是日志文件也可以滚动文件输出…日志器模块此模块是对以上几个模块的整合模块用户通过日志器进行日志的输出有效降低用户的使用难度。包含有日志消息落地模块对象日志消息格式化模块对象日志输出等级日志器管理模块创建的所有日志器进行统一管理。并提供一个默认日志器提供标准输出的日志输出。异步线程模块实现对日志的异步输出功能用户只需要将输出日志任务放入任务池异步线程负责日志的落地输出功能以此提供更加高效的非阻塞日志输出。 5.2 模块关系图 6. 代码设计 6.1 实用类设计 提前完成一些零碎的功能接口以便于项目中会用到。 获取系统时间判断文件是否存在获取文件的所在目录路径创建目录 6.2 日志等级类设计 定义出日志系统所包含的所有日志等级分别为 UNKNOW未知等级日志DEBUG调试等级的日志INFO提示等级的日志WARN警告等级的日志ERROR错误等级的日志FATAL致命错误等级的日志OFF关闭所有日志输出 每个项目都会设置一个默认的日志输出等级只有输出的日志等级大于等于默认限制等级的时候才可以进行输出 提供一个接口将对应等级的枚举转换为一个对应的字符串例如DEBUG -- “DEBUG” 6.3 日志消息类设计 日志消息类主要是封装一条完整的日志消息所需的内容其中包括日志输出时间、日志等级、日志源文件名称、源代码行号、线程ID、具体的日志信息等内容。 6.4 日志输出格式化类设计 日志格式化Formatter类主要负责格式化日志消息组织成为指定格式的字符串。其主要包含以下内容 格式化字符串 %d 日期 %T 缩进 %t 线程id %p 日志级别 %c 日志器名称 %f 文件名 %l 行号 %m 日志消息 %n 换行 格式化子项数组 MsgFormatItem 有效日志数据 LevelFormatItem 日志等级 NameFormatItem 日志器名称 ThreadFormatItem 线程ID TimeFormatItem 时间戳 CFileFormatItem 文件名 CLineFormatItem 行号 TabFormatItem 制表符缩进 NLineFormatItem 换行 OtherFormatItem 非格式化的原始字符串 6.5 日志落地(LogSink)类设计简单工厂模式 日志落地类主要负责将格式化完成后的日志消息字符串输出到指定位置。 目前实现了三个不同方向上的日志落地 标准输出StdoutSink固定文件FileSink滚动文件RollSink 6.6 日志器类(Logger)设计建造者模式 日志器主要是对前面所有模块进行整合向外提供接口完成不同等级的日志输出 管理的成员 格式化模块对象不同输出等级的日志 落地模块对象数组一个日志器可能会向多个位置进行日志输出 默认的日志输出限制等级大于等于限制等级的日志才能输出 互斥锁保证日志输出是线程安全的不会出现交叉日志 日志器名称日志器的唯一表示以便于查找实现 抽象Logger基类派生出同步日志器类 异步日志器类两个不同的日志器在日志的落地方式上有所不同 同步日志器直接对日志消息进行输出 异步日志器将日志消息放入缓冲区由异步线程进行输出 使用建造者模式来建造日志器不要让用户直接去构造日志器简化用户操作 抽象一个日志器建造者类 设置日志器类型 将不同类型日志器的创建放到同一个日志器建造者类中完成 派生出具体的建造者类 – 局部日志器的建造者 全局的日志器建造者 6.7 双缓冲区异步任务处理器AsyncLooper设计 设计思想异步处理线程 数据池 使用者将需要完成的任务添加到任务池中由异步线程来完成任务的实际执行操作。 任务池的设计思想双缓冲区阻塞数据池 优势避免了空间的频繁申请释放且尽可能的减少了生产者与消费者之间锁冲突的概率提高了任务处理效率。 在任务池的设计中有很多备选方案比如循环队列等等但是不管是哪一种都会涉及到锁冲突的情况因为在生产者与消费者模型中任何两个角色之间都具有互斥关系因此每一次的任务添加与取出都有可能涉及锁的冲突而双缓冲区不同双缓冲区是处理器将一个缓冲区中的任务全部处理完毕 后然后交换两个缓冲区重新对新的缓冲区中的任务进行处理虽然同时多线程写入也会冲突但是冲突并不会像每次只处理一条的时候频繁减少了生产者与消费者之间的锁冲突且不涉及到空间的频繁申请释放所带来的消耗。 单个缓冲区的设计直接存放格式化后的日志消息字符串这样做的优点是 减少了LogMsg对象频繁的构造的消耗可以针对缓冲区中的日志消息一次性进行IO操作减少IO次数提高效率 6.8 异步日志器(AsyncLogger)设计 异步日志器类继承自日志器类 并在同步日志器类上拓展了异步消息处理器。 异步工作使用双缓冲区 外界将任务数据添加到输入缓冲区中。异步线程对处理缓冲区中的数据进行处理如果处理缓冲区中没有数据就交换缓冲区回调函数针对缓冲区中数据的处理接口外界传入一个函数告诉异步工作器如何处理 6.9 单例日志器管理类设计单例模式 日志的输出我们希望能够在任意位置都可以进行但是当我们创建了一个日志器之后就会受到日志器所在作用域的访问属性限制。 为了突破访问区域的限制我们创建一个日志器管理类且这个类是一个单例类这样的话我们就可以在任意位置来通过管理器单例获取到指定的日志器来进行日志输出了。 单例管理器创建的时候默认创建一个用于标准输出的打印日志器让用户再不创建任何日志器的情况下也能进行标准输出的打印方便用户使用。 基于单例日志器管理器的设计思想我们对于日志器建造者类进行继承继承出一个全局日志器建造者类实现一个日志器在创建完毕后直接将其添加到单例的日志器管理器中以便于能够在任何位置通过日志器名称能够获取到指定的日志器进行日志输出。 6.10 日志宏全局接口设计代理模式 提供全局的日志器获取接口。 使用代理模式通过全局函数或宏函数来代理Logger类的log、debug、info、warn、error、fatal等接口以便于控制源码文件名称和行号的输出控制简化用户操作。 当仅需标准输出日志的时候可以通过主日志器来打印日志。 且操作时只需要通过宏函数直接进行输出即可。 7. 性能测试 下面对日志系统做一个性能测试测试一下平均每秒能打印多少条日志消息到文件。 主要的测试方法是每秒能打印日志数 打印日志条数 / 总的打印日志消耗时间 主要测试要素同步/异步 单线程/多线程 100w条指定长度的日志输出所耗时间每秒可以输出多少条日志每秒可以输出多少MB日志 测试环境 阿里云轻量应用服务器 CPU2核 CPU RAM2GB ROM50GB ESSD OSCentOS 7.6 [Janonezlinux bench]$ ./bench // sync_logger - 同步单线程 测试日志: 1000000 条, 总大小: 97656KB线程[0]: 输出日志数量: 1000000, 耗时: 1.8201s总耗时: 1.8201 s每秒输出日志数量: 549420 条每秒输出日志大小: 53654KB// async_logger - 异步单线程 测试日志: 1000000 条, 总大小: 97656KB线程[0]: 输出日志数量: 1000000, 耗时: 1.67192s总耗时: 1.67192 s每秒输出日志数量: 598113 条每秒输出日志大小: 58409KB[Janonezlinux bench]$ ./bench // sync_logger - 同步多线程 测试日志: 1000000 条, 总大小: 97656KB线程[2]: 输出日志数量: 333333, 耗时: 1.57987s线程[1]: 输出日志数量: 333333, 耗时: 1.69374s线程[0]: 输出日志数量: 333333, 耗时: 1.72153s总耗时: 1.72153 s每秒输出日志数量: 580876 条每秒输出日志大小: 56726KB// async_logger - 异步多线程 测试日志: 1000000 条, 总大小: 97656KB线程[0]: 输出日志数量: 333333, 耗时: 1.14526s线程[2]: 输出日志数量: 333333, 耗时: 1.18942s线程[1]: 输出日志数量: 333333, 耗时: 1.26282s总耗时: 1.26282 s每秒输出日志数量: 791876 条每秒输出日志大小: 77331KB
http://www.hkea.cn/news/14434399/

相关文章:

  • 河北高端网站建设旅游wordpress
  • 英语培训建设网站方案北京做网站公司哪家好
  • 办公内网网站建设标准计算机软件技术主要学什么
  • 宣传信息网网站规划书网站建设怎么好
  • 大型网站许多网站wordpress 打卡插件
  • 企业网站优化要多少钱wordpress外部样式
  • 什么是二级域名网站国外精彩网站
  • 工信部网站备案被注销物流网信息平台
  • 泉州网站建设推广服务黄石网站建设费用
  • 网站建设客户分析调查表题库网站怎么做
  • 备案官方网站东莞厚街创新科技职业学院
  • fm网站开发wordpress模板开发套用
  • 织梦网站主页售后网站开发需求文档
  • 二级域名建立网站最新国际新闻热点事件
  • 加速百度对网站文章的收录企业三合一建站公司怎么找
  • 网站镜像上传到域名空间5118站长网站
  • 自助建站系统步骤晚上正能量网站大全
  • 广州市天河区建设和水务局网站网站建设推广怎么玩
  • 宠物网站制作内容房地产信息网新楼盘
  • 网站开发插件平面设计有哪些
  • intitle 郑州网站建设网站开发需要什么人才
  • 表白网页制作网站asp.net 个人网站
  • 网站建设公司经营优惠券网站开发
  • 网站框架类型做一整套网站需要什么
  • 网站付款链接怎么做自己建立网站步骤
  • 电脑网站开发wordpress 显示空白
  • 优化网站seo网站欢迎页源码
  • 铜陵建设网站上海网站建设企业
  • 个人备案 网站名Wordpress热门评论插件
  • 小游戏网站建设公司模板支架