<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
之前看到有的博文說glog效能很好,效率很高,當時第一反應是“這個結論是几几年的?”,可惜博文都是各種抄襲和轉載,不容易找到結論出處,我一直很懷疑它的寫入吞吐效能。
之前作為學習優秀的程式碼案例,略看過glog的原始碼。它是執行緒同步的方式記錄和寫入,每次呼叫紀錄檔的地方都要建立和釋放紀錄檔器,確實在每次建立物件時並沒有建立額外快取空間,而是複用第一次建立的記憶體空間,這相比於每次建立申請新記憶體而言,效率很高,難道高效能僅僅指這個?可惜我自己的C++水平也就是應用程式開發,暫時是沒有能力寫出這類高效能基礎工具庫的。
所以,不如直接執行以下,從結果上比一比就知道。
今天把spdlog紀錄檔庫,也用了下,並且和glog做了簡單對比。spdlog在引入到專案中的成本很低,只要引入標頭檔案,glog還需要設定下,如果是第一次,還需要額外編譯一個glog版本。
基於十萬筆紀錄檔資料,大概也就10MB不到。
測試結果如下,是在一臺低配的伺服器上跑的,硬碟還是機械的scsi介面,後面給出測試程式碼,程式程式碼相同環境下執行:
在同步呼叫的場景下,spdlog比glog快,spdlog耗時0.135秒,glog耗時1.027秒,簡單非同步spdlog耗時0.158秒,普通ofstream流寫入0.252秒。
另外,在自己開發環境的電腦上用的是固態硬碟,結果如下:
在同步呼叫的場景下,spdlog比glog快,spdlog耗時0.057秒,glog耗時0.475秒,簡單非同步spdlog耗時0.093秒,普通ofstream流寫入0.112秒。
winserver 2012, 非固態硬碟
VS2019 ,C++11,spdlog-1.x,glog
#pragma once #define GLOG_NO_ABBREVIATED_SEVERITIES #include <spdlog/spdlog.h> #include <logging.h> #include <thread> #include <spdlog/stopwatch.h> using namespace google; #ifdef _DEBUG #pragma comment(lib, "glogd.lib") #else #pragma comment(lib, "glog.lib") #endif // DEBUG void testGlog2() { int i = 0; spdlog::stopwatch sw; while (i < 100 * 1000) { LOG(INFO) << "async logger"; i++; } LOG(INFO) << "testGlog Elapsed " << sw.elapsed().count(); } void testGlog() { // Start google log system: FLAGS_log_dir = ".\log\"; google::InitGoogleLogging("loglog"); google::SetLogDestination(google::GLOG_INFO, ".\logs\glog"); google::SetStderrLogging(google::GLOG_FATAL); google::SetLogFilenameExtension("log_"); FLAGS_colorlogtostderr = true; // Set log color FLAGS_logbufsecs = 5; // Set log output speed(s) FLAGS_max_log_size = 50; // Set max log file size FLAGS_stop_logging_if_full_disk = true; // If disk is full std::thread* t = new std::thread(testGlog2); t->join(); google::ShutdownGoogleLogging(); }
spdlog::info(" 建立basicFileLogger "); auto logger = spdlog::basic_logger_mt("basic_logger", "logs/basic_log.txt"); logger->info("檔案建立完畢。"); logger->set_pattern("[%Y-%m-%d %H:%M:%S.%f %z][thread %t][%n][%l]: %v"); int i = 0; spdlog::stopwatch sw; while (i < 100 * 1000) { logger->info("basic_logger_mt logger"); i++; } logger->info("asyncExample Elapsed {:.7}", sw);
ofstream logger; logger.open("logs/fopen.txt", std::ios::out); int i = 0; spdlog::stopwatch sw; while (i < 100 * 1000) { logger << asctime(& spdlog::details::os::gmtime()) <<__FUNCTION__ << " "<<__LINE__ <<" " << ("async logger") <<"rn"; i++; } logger<<"asyncExample Elapsed "<< sw.elapsed().count(); logger.close();
僅僅從呼叫效能上看,spdlog耗時略低於glog。呼叫耗時從低到高如下:
spdlog同步 < spdlog非同步 < glog < 普通ofstream流
但是如果把計算機看作是工程化,則並不是簡單追求效能的。我覺得工程有一個因素是投入產出比。實際上,在平常專案中,我也用的是glog居多,因為glog很多的LOG_IF這類宏用起來很方便,對於紀錄檔吞吐效能也足夠使用,而且預設是dll方式使用,在多個獨立的元件dll之間可以使用同一個glog範例,只有少數模組需要儘量減少紀錄檔寫入影響的地方,用了spdlog非同步方式。
會不會是這個測試哪裡錯了?更多關於 c++ glog與spdlog效能對比的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45