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

优秀网站制作实例展示ssh网站开发

优秀网站制作实例展示,ssh网站开发,网站查外链,中国建设银行总行门户网站全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目结束! 性能测试 下面对日志系统做一个性能测试,测试一下平均每秒能打印多少条日志消息到文件。 主要的测试方法是:每秒能…

全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~   

本文项目结束!


性能测试

下面对日志系统做一个性能测试,测试一下平均每秒能打印多少条日志消息到文件。
主要的测试方法是:每秒能打印日志数 = 打印日志条数 / 总的打印日志消耗时间
主要测试要素:同步 / 异步 & 单线程 / 多线程

  • 100w + 条指定长度的日志输出所耗时间
  • 每秒可以输出多少条日志
  • 每秒可以输出多少 MB 日志

测试环境:

  • CPU: AMD Ryzen 7 5800H with Radeon Graphics 3.20 GHz
  • RAM: 16G DDR4 3200
  • ROM: 512G-SSD
  • OS: ubuntu-22.04TLS 虚拟机(2CPU 核心 / 4G 内存)

 

bench.cc

#include"../logs/mylog.h"#include<chrono>
void bench(const std::string &logger_name,size_t thread_count,size_t msg_count,size_t msg_len)
{//1.获取日志器mylog::Logger::ptr logger=mylog::get_logger(logger_name);if(logger.get()==nullptr){return;}std::cout<<"开始测试:"<<msg_count<<"条日志,总大小为:"<<msg_count*msg_len/1024<<"KB"<<std::endl;//2.组织指定长度的日志消息std::string msg(msg_len-1,'a');//少一个字符,以便于结尾有换行符//3.创建指定数量的线程std::vector<std::thread> threads;size_t msg_per_thread=msg_count/thread_count;std::vector<double> cost_arry(thread_count);for(size_t i=0;i<thread_count;i++){threads.emplace_back([&,i](){//4.线程函数内部开始计时auto start_time=std::chrono::high_resolution_clock::now();//5.开始循环写日志for(size_t j=0;j<msg_per_thread;j++){logger->fatal(msg);}//6.线程函数內部结束计时auto end_time=std::chrono::high_resolution_clock::now();std::chrono::duration<double> cost=end_time-start_time;cost_arry[i]=cost.count();std::cout<<"线程 "<<i<<": "<<"\t 输出日志数量:"<<msg_per_thread<<"\t 总耗时:"<<cost.count()<<"s"<<std::endl;});}for(int i=0;i<thread_count;i++){threads[i].join();}//7.计算总耗时:在多线程中,每个线程都会消耗时间,但是线程是并发执行的,所以总耗时是最高的线程的耗时double max_cost=0;for(int i=0;i<thread_count;i++){if(cost_arry[i]>max_cost){max_cost=cost_arry[i];}}size_t msg_per_sec=msg_count/max_cost;size_t size_pre_sec=(msg_count+msg_len)/(max_cost*1024);std::cout<<"总耗时:"<<max_cost<<"s"<<std::endl;std::cout<<"日志输出速度:"<<msg_per_sec<<"条/秒"<<std::endl;std::cout<<"日志输出速度:"<<size_pre_sec<<"KB/秒"<<std::endl;
}
void sync_bench()
{std::shared_ptr<mylog::Logger_builder> builder(new mylog::Global_logger_builder());builder->buildLoggerName("Sync_logger");builder->buildLimitLevel(mylog::Level::Debug);builder->buildLoggerType(mylog::LoggerType::Loggertype_Sync); // 同步日志器builder->buildFormatBuilder("%m%n");builder->buildSinks<mylog::FileSink>("./logfile/sync.log");builder->build();bench("Sync_logger",1,1000000,100);
}
void async_bench()
{std::shared_ptr<mylog::Logger_builder> builder(new mylog::Global_logger_builder());builder->buildLoggerName("Async_logger");builder->buildLimitLevel(mylog::Level::Debug);builder->buildLoggerType(mylog::LoggerType::Loggertype_Async); // 异步日志器builder->buildFormatBuilder("%m%n");builder->buildSinks<mylog::FileSink>("./logfile/async.log");builder->build();bench("Async_logger",3,1000000,100);
}
int main()
{//sync_bench();async_bench();return 0;
}

单线程: 

多线程: 

text.cc(用于普通情况) 

#include "../logs/mylog.h"void loggerTest(const std::string &logger_name) {INFO("------------example--------------------");mylog::Logger::ptr lp = mylog::LoggerManager::getInstance().getLogger(logger_name);lp->debug("%s", "logger->debug");lp->info("%s", "logger->info");lp->warn("%s", "logger->warn");lp->error("%s", "logger->error");lp->fatal("%s", "logger->fatal");// INFO("---------------------------------------");std::string log_msg = "hello -";size_t fsize = 0;size_t count = 0;while(count < 10000) {std::string msg = log_msg + std::to_string(count++);lp->error("%s", msg.c_str());}
}
void functional_test() {
}
int main(int argc, char *argv[])
{std::shared_ptr<mylog::Logger_builder> builder(new mylog::Global_logger_builder());builder->buildLoggerName("Async_logger");builder->buildLimitLevel(mylog::Level::Debug);builder->buildLoggerType(mylog::LoggerType::Loggertype_Async); // 异步日志器builder->buildFormatBuilder("[%d{%H:%M:%S}][%t][%p][%c][%f:%l] %m%n");builder->buildSinks<mylog::StdoutSink>();builder->buildSinks<mylog::FileSink>("./logfile/test_file.log");builder->buildSinks<mylog::RollSinkbySize>("./logfile/test_roll.log", 1024 * 1024*0.6);builder->build();loggerTest("Async_logger");return 0;
}

text.cc(用于根据时间分配文件的情况) 

//对时间分块
#include "../logs/mylog.h"void loggerTest(const std::string &logger_name) {INFO("------------example--------------------");mylog::Logger::ptr lp = mylog::LoggerManager::getInstance().getLogger(logger_name);lp->debug("%s", "logger->debug");lp->info("%s", "logger->info");lp->warn("%s", "logger->warn");lp->error("%s", "logger->error");lp->fatal("%s", "logger->fatal");// INFO("---------------------------------------");std::string log_msg = "hello -";size_t fsize = 0;size_t count = 0;time_t start_time = mylog::util::Date::getTime();while(mylog::util::Date::getTime() - start_time < 5) {std::string msg = log_msg + std::to_string(count++);usleep(1000);lp->error("%s", msg.c_str());}
}
void functional_test() {
}
int main(int argc, char *argv[])
{std::shared_ptr<mylog::Logger_builder> builder(new mylog::Global_logger_builder());builder->buildLoggerName("Async_logger");builder->buildLimitLevel(mylog::Level::Debug);builder->buildLoggerType(mylog::LoggerType::Loggertype_Async); // 异步日志器builder->buildFormatBuilder("[%d{%H:%M:%S}][%t][%p][%c][%f:%l] %m%n");builder->buildSinks<mylog::StdoutSink>();builder->buildSinks<mylog::FileSink>("./logfile/test_file.log");builder->buildSinks<mylog::RollSinkbyTime>("./logfile/test_roll.log", mylog::TimeInterval::SECOND); // 按时间分块builder->build();loggerTest("Async_logger");return 0;
}


感谢你看到这里~日志系统的项目已经全部实现完成了!

未来共同进步,期待你的关注👉【A charmer】


文章转载自:

http://H5sNTKVy.sqyjh.cn
http://iZt8lDQ5.sqyjh.cn
http://4oGz62Qf.sqyjh.cn
http://tpHhjMRE.sqyjh.cn
http://ddDOISVq.sqyjh.cn
http://EOysuBSr.sqyjh.cn
http://mQeCqqxb.sqyjh.cn
http://XCPu9r6b.sqyjh.cn
http://rj6zzWCY.sqyjh.cn
http://D0wErvy4.sqyjh.cn
http://1LnQwJfB.sqyjh.cn
http://eODRZef6.sqyjh.cn
http://DQbcSk13.sqyjh.cn
http://On0knCtW.sqyjh.cn
http://PkhCLV53.sqyjh.cn
http://a0i01AFB.sqyjh.cn
http://Nwk1oid2.sqyjh.cn
http://M7TxJqaP.sqyjh.cn
http://3TanDn31.sqyjh.cn
http://IvYGxddg.sqyjh.cn
http://H8kwoT7j.sqyjh.cn
http://lE9x5rbZ.sqyjh.cn
http://VsxyBJwy.sqyjh.cn
http://3fh7Xgda.sqyjh.cn
http://maI0rn0b.sqyjh.cn
http://5ZyvN2my.sqyjh.cn
http://grtm1HJP.sqyjh.cn
http://yFzmbhGt.sqyjh.cn
http://Yci7Vu9y.sqyjh.cn
http://n0CHLJF9.sqyjh.cn
http://www.dtcms.com/wzjs/642882.html

相关文章:

  • 网站开发定制合同公司网站做地图地址
  • 网站繁体和中文这么做优秀设计师个人网站
  • 莱州教体局网站网站的建设 教学计划
  • wordpress主题雪人yeti1.9.2淄博网站关键词优化
  • 网站中的宣传册翻页动画怎么做学做网站的视频
  • 建设优质网站需要什么网页制作基础入门教程
  • 建设网站可以做什么怎样去各大网站做淘宝推广
  • 微网站开发技巧肥西县城乡建设局网站
  • 网站地图灰色效果的怎么做的orchard可以做哪些网站
  • 甘肃酒泉建设银行网站最新新闻热点事件2024年
  • 河源和平县建设局网站网线制作实验总结
  • 免费网站软件app郑州企业网站排名优化公司
  • 上海人才网官方网站苏州建设银行招聘网站
  • 宜州市住房保障和城乡建设局网站深圳网站制作建设服务公司
  • 只做美食类目产品的网站家居企业网站建设公司
  • 品牌网站建设报价单html5网站建设加盟
  • 河南中国建设银行官网站郑州优化网站关键词
  • 企业的互联网推广短视频seo排名加盟
  • 做检测设备的网站有哪些成都比较好的广告设计制作公司
  • 高端网站开发费用个人做外贸怎么做推广
  • 博客做公司网站seo范畴
  • 找人做网站要准备什么天猫网站建设论文
  • 北京网站制作多少钱长沙制作网页网站
  • 永城网站设计公司电子商务营销推广方案
  • 建立属于我们的网站怎么用织梦做自己的网站
  • 注册企业邮箱163seo成都
  • 网站做优化一般几个字附近哪里有建筑模板卖
  • 南阳企业网站推广方法二维码生成短链接
  • 深圳模板网站建设班级优化大师使用心得
  • 闵行网站建设多久能见效果装饰网站开发背景