最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++的glog與spdlog的性能對比測試分析

 更新時(shí)間:2022年05月20日 11:21:34   作者:文先生愛學(xué)習(xí)  
這篇文章主要為大家介紹了c++的glog與spdlog的性能對比測試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題:

之前看到有的博文說glog性能很好,效率很高,當(dāng)時(shí)第一反應(yīng)是“這個(gè)結(jié)論是幾幾年的?”,可惜博文都是各種抄襲和轉(zhuǎn)載,不容易找到結(jié)論出處,我一直很懷疑它的寫入吞吐性能。

之前作為學(xué)習(xí)優(yōu)秀的代碼案例,略看過glog的源代碼。它是線程同步的方式記錄和寫入,每次調(diào)用日志的地方都要?jiǎng)?chuàng)建和釋放日志器,確實(shí)在每次創(chuàng)建對象時(shí)并沒有創(chuàng)建額外緩存空間,而是復(fù)用第一次創(chuàng)建的內(nèi)存空間,這相比于每次創(chuàng)建申請新內(nèi)存而言,效率很高,難道高性能僅僅指這個(gè)?可惜我自己的C++水平也就是應(yīng)用程序開發(fā),暫時(shí)是沒有能力寫出這類高性能基礎(chǔ)工具庫的。

所以,不如直接運(yùn)行以下,從結(jié)果上比一比就知道。

測試內(nèi)容:

今天把spdlog日志庫,也用了下,并且和glog做了簡單對比。spdlog在引入到項(xiàng)目中的成本很低,只要引入頭文件,glog還需要配置下,如果是第一次,還需要額外編譯一個(gè)glog版本。

基于十萬筆日志數(shù)據(jù),大概也就10MB不到。

測試結(jié)果如下,是在一臺(tái)低配的服務(wù)器上跑的,硬盤還是機(jī)械的scsi接口,后面給出測試代碼,程序代碼相同環(huán)境下運(yùn)行:

在同步調(diào)用的場景下,spdlog比glog快,spdlog耗時(shí)0.135秒,glog耗時(shí)1.027秒,簡單異步spdlog耗時(shí)0.158秒,普通ofstream流寫入0.252秒。

另外,在自己開發(fā)環(huán)境的電腦上用的是固態(tài)硬盤,結(jié)果如下:

在同步調(diào)用的場景下,spdlog比glog快,spdlog耗時(shí)0.057秒,glog耗時(shí)0.475秒,簡單異步spdlog耗時(shí)0.093秒,普通ofstream流寫入0.112秒。

測試環(huán)境:

winserver 2012, 非固態(tài)硬盤

VS2019 ,C++11,spdlog-1.x,glog

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異步測試代碼:

spdlog::info(" 創(chuàng)建basicFileLogger ");
        auto logger = spdlog::basic_logger_mt("basic_logger", "logs/basic_log.txt");
        logger->info("文件創(chuàng)建完畢。");
        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);

普通io流寫入測試代碼:

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") <<"\r\n";
    i++;
  }
  logger<<"asyncExample Elapsed "<< sw.elapsed().count();
  logger.close();

總結(jié):

僅僅從調(diào)用性能上看,spdlog耗時(shí)略低于glog。調(diào)用耗時(shí)從低到高如下:

spdlog同步 < spdlog異步 < glog < 普通ofstream流

但是如果把計(jì)算機(jī)看作是工程化,則并不是簡單追求性能的。我覺得工程有一個(gè)因素是投入產(chǎn)出比。實(shí)際上,在平常項(xiàng)目中,我也用的是glog居多,因?yàn)間log很多的LOG_IF這類宏用起來很方便,對于日志吞吐性能也足夠使用,而且默認(rèn)是dll方式使用,在多個(gè)獨(dú)立的組件dll之間可以使用同一個(gè)glog實(shí)例,只有少數(shù)模塊需要盡量減少日志寫入影響的地方,用了spdlog異步方式。

會(huì)不會(huì)是這個(gè)測試哪里錯(cuò)了?更多關(guān)于 c++ glog與spdlog性能對比的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用C++類實(shí)現(xiàn)單向鏈表的增刪查和反轉(zhuǎn)操作方法

    用C++類實(shí)現(xiàn)單向鏈表的增刪查和反轉(zhuǎn)操作方法

    下面小編就為大家?guī)硪黄肅++類實(shí)現(xiàn)單向鏈表的增刪查和反轉(zhuǎn)操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • C++中的友元函數(shù)與友元類詳情

    C++中的友元函數(shù)與友元類詳情

    這篇文章主要介紹了C++中的友元函數(shù)與友元類詳情,對類的封裝是C++三大特性中的一個(gè)重要特性,封裝好的數(shù)據(jù)在類的外部是訪問不到的但是一旦出了問題,想要操作被封裝的數(shù)據(jù)怎么辦呢?由此友元函數(shù)友元類誕生了,下文我們來詳細(xì)來接一下具體的有緣類吧
    2022-02-02
  • 冒泡排序的三種實(shí)現(xiàn)方法

    冒泡排序的三種實(shí)現(xiàn)方法

    本篇文章是對冒泡排序的三種實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下。希望對大家有所幫助
    2013-10-10
  • C++數(shù)字三角形問題與dp算法

    C++數(shù)字三角形問題與dp算法

    這篇文章主要介紹了C++數(shù)字三角形問題與dp算法的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • C語言中system()函數(shù)的用法總結(jié)

    C語言中system()函數(shù)的用法總結(jié)

    system()函數(shù)功能強(qiáng)大。以下小編就為大家介紹一下在C語言中system()函數(shù)的用法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++日歷拼圖的解法你了解嗎

    C++日歷拼圖的解法你了解嗎

    這篇文章主要為大家詳細(xì)介紹了日歷拼圖C++的解法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 一文帶你了解C語言中的0長度數(shù)組(可變數(shù)組/柔性數(shù)組)

    一文帶你了解C語言中的0長度數(shù)組(可變數(shù)組/柔性數(shù)組)

    眾所周知,?GNU/GCC?在標(biāo)準(zhǔn)的?C/C++?基礎(chǔ)上做了有實(shí)用性的擴(kuò)展,?零長度數(shù)組(Arrays?of?Length?Zero)?就是其中一個(gè)知名的擴(kuò)展,本文就來聊聊零長度數(shù)組的相關(guān)知識(shí)吧
    2023-03-03
  • C語言超全面覆蓋操作符知識(shí)點(diǎn)

    C語言超全面覆蓋操作符知識(shí)點(diǎn)

    C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。讓我們通讀本篇來詳細(xì)了解吧
    2022-06-06
  • C++與Lua協(xié)程交互的示例詳解

    C++與Lua協(xié)程交互的示例詳解

    Lua 語言不支持真正的多線程,即不支持共享內(nèi)存的搶占式線程,在執(zhí)行協(xié)程體的 Lua 腳本時(shí),Lua 同樣可以調(diào)用 C++ 的函數(shù),本文給大家介紹了C++ 與 Lua 的協(xié)程交互,需要的朋友可以參考下
    2024-02-02
  • C語言中的內(nèi)存管理詳情

    C語言中的內(nèi)存管理詳情

    這篇文章主要介紹了C語言中的內(nèi)存管理詳情,手工申請內(nèi)存使用malloc展開全文內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05

最新評論

屏山县| 藁城市| 河池市| 长乐市| 壤塘县| 贵定县| 绵竹市| 含山县| 明溪县| 大荔县| 南投市| 刚察县| 昭平县| 杂多县| 洞口县| 张家界市| 太谷县| 大厂| 洛扎县| 瓦房店市| 丹巴县| 宁河县| 德兴市| 彰化市| 苍山县| 翁源县| 毕节市| 女性| 瑞安市| 双桥区| 河间市| 昭觉县| 金塔县| 昆山市| 讷河市| 龙口市| 象山县| 同江市| 广平县| 新乐市| 南木林县|