<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      #include <iostream>
      #include <chrono>
      #include <ctime>
      
      int main()
      {
       const int ts = 1000000;
      
      	std::chrono::steady_clock::time_point beg;
      	std::chrono::steady_clock::time_point end;
      
      	int64_t ms = 0;
      	beg = std::chrono::steady_clock::now();
      	for (int i = 0; i < ts; i ++)
      	{
      		std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
      
      		ms += std::chrono::duration_cast<std::chrono::milliseconds>(now - beg).count();
      	}
      	end = std::chrono::steady_clock::now();
      	std::cout << "run steady_clock " << ms << " times " << ts << " time cost (ms) = "
      		<< std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() << std::endl;
      
      	ms = 0;
      	beg = std::chrono::steady_clock::now();
      	std::chrono::high_resolution_clock::time_point base = std::chrono::high_resolution_clock::now();
      	for (int i = 0; i < ts; i ++)
      	{
      		std::chrono::high_resolution_clock::time_point now = std::chrono::high_resolution_clock::now();
      
      		ms += std::chrono::duration_cast<std::chrono::milliseconds>(now - base).count();
      	}
      	end = std::chrono::steady_clock::now();
      	std::cout << "run high_resolution_clock " << ms << " times " << ts << " time cost (ms) = "
      		<< std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() << std::endl;
      
      	ms = 0;
      	beg = std::chrono::steady_clock::now();
      	std::chrono::system_clock::time_point base1 = std::chrono::system_clock::now();
      	for (int i = 0; i < ts; i ++)
      	{
      		std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
      
      		ms += std::chrono::duration_cast<std::chrono::milliseconds>(now - base1).count();
      	}
      	end = std::chrono::steady_clock::now();
      	std::cout << "run system_clock " << ms << " times " << ts << " time cost (ms) = "
      		<< std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() << std::endl;
      
      	ms = 0;
      	beg = std::chrono::steady_clock::now();
      	for (int i = 0; i < ts; i ++)
      	{
      		struct timespec ts;
      		clock_gettime(CLOCK_MONOTONIC, &ts);
      
      		ms += ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
      	}
      	end = std::chrono::steady_clock::now();
      	std::cout << "run clock_gettime MONOTONIC " << ms << " times " << ts << " time cost (ms) = "
      		<< std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() << std::endl;
      
      	ms = 0;
      	beg = std::chrono::steady_clock::now();
      	for (int i = 0; i < ts; i ++)
      	{
      		struct timespec ts;
      		clock_gettime(CLOCK_REALTIME, &ts);
      
      		ms += ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
      	}
      	end = std::chrono::steady_clock::now();
      	std::cout << "run clock_gettime REALTIME " << ms << " times " << ts << " time cost (ms) = "
      		<< std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() << std::endl;
      
      	return 0;
      }
      

      測試結(jié)果:

      $ g++ test.cpp
      $ ./a.out 
      run steady_clock 25637513 times 1000000 time cost (ms) = 52
      run high_resolution_clock 27368735 times 1000000 time cost (ms) = 55
      run system_clock 27297934 times 1000000 time cost (ms) = 55
      run clock_gettime MONOTONIC 2068584029758 times 1000000 time cost (ms) = 40
      run clock_gettime REALTIME 1650699050496181143 times 1000000 time cost (ms) = 40
      
      $ g++ -O2 test.cpp
      $ ./a.out 
      run steady_clock 22595347 times 1000000 time cost (ms) = 46
      run high_resolution_clock 22716547 times 1000000 time cost (ms) = 46
      run system_clock 22660435 times 1000000 time cost (ms) = 46
      run clock_gettime MONOTONIC 2107850749483 times 1000000 time cost (ms) = 40
      run clock_gettime REALTIME 1650699089762857666 times 1000000 time cost (ms) = 40
      

      執(zhí)行1000000次獲取時間,在不優(yōu)化的情況下,chrono耗時52ms左右,clock_gettime一直穩(wěn)定在40ms,使用-O2優(yōu)化,chrono降到45ms左右,依然比clock_gettime要慢(clock_gettime包含在glibc庫里,所以優(yōu)化不優(yōu)化對它基本沒什么影響)。chrono要慢一些,但有更好的通用性,所以還是值得用chrono替換clock_gettime的。

      瞅了一眼glibc的chrono源碼,發(fā)現(xiàn)它在linux下也只是把clock_gettime包裝了一下

          steady_clock::time_point
          steady_clock::now() noexcept
          {
      #ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
            timespec tp;
            // -EINVAL, -EFAULT
      #ifdef _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL
            syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
      #else
            clock_gettime(CLOCK_MONOTONIC, &tp);
      #endif
            return time_point(duration(chrono::seconds(tp.tv_sec)
      				 + chrono::nanoseconds(tp.tv_nsec)));
      #else
            return time_point(system_clock::now().time_since_epoch());
      #endif
          }
      

      而這些多出來的時候,都是花在time_point這些包裝上了。

      不過奇怪的是,在另一臺性能較差的筆記本上,chrono的性能差距被放大了:

      $ g++ test.cpp
      $ ./a.out 
      run steady_clock 70294691 times 1000000 time cost (ms) = 136
      run high_resolution_clock 65364921 times 1000000 time cost (ms) = 128
      run system_clock 65016942 times 1000000 time cost (ms) = 127
      run clock_gettime MONOTONIC 211863588796 times 1000000 time cost (ms) = 64
      run clock_gettime REALTIME 1650700979815349233 times 1000000 time cost (ms) = 62
      
      $ g++ -O2 test.cpp
      $ ./a.out 
      run steady_clock 52353254 times 1000000 time cost (ms) = 93
      run high_resolution_clock 35520387 times 1000000 time cost (ms) = 76
      run system_clock 41331069 times 1000000 time cost (ms) = 82
      run clock_gettime MONOTONIC 226324539461 times 1000000 time cost (ms) = 60
      run clock_gettime REALTIME 1650700994275088945 times 1000000 time cost (ms) = 57
      

      可以看到,在不優(yōu)化的時候,chrono消耗的時間是clock_gettime的2倍還多,即使在O2優(yōu)化后,差距也還是要大一些。

      posted on 2022-04-23 16:09  coding my life  閱讀(2754)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产AV永久无码青青草原| 国产农村妇女毛片精品久久| 伊人蕉影院久亚洲高清| 日韩一区二区三区高清视频| 亚洲一区在线成人av| 全椒县| 韩国无码av片在线观看| 色婷婷婷丁香亚洲综合| 色综合视频一区二区三区| 国产黄色精品一区二区三区 | 精品久久人人妻人人做精品| 中文字幕va一区二区三区| 精品日本乱一区二区三区| 亚洲欧美日韩精品色xxx| 精品一区二区三区日韩版| 亚洲精品二区在线播放| 亚洲国产精品综合久久2007| 亚洲永久一区二区三区在线| 制服jk白丝h无内视频网站| 久久精品国产免费观看频道| 99久久久国产精品免费无卡顿 | 狠狠躁日日躁夜夜躁欧美老妇| 亚洲中文久久久精品无码| 亚洲熟女一区二区av| 大陆精大陆国产国语精品| 国产一区二区三区怡红院| 国产精品午夜福利精品| 开心色怡人综合网站| 日日摸夜夜添狠狠添欧美| 丰满无码人妻热妇无码区| 亚洲国产一区二区三区久| 东方四虎在线观看av| 最新成免费人久久精品| 亚洲精品熟女一区二区| 东京热加勒比无码少妇| 97国产露脸精品国产麻豆| 未满十八18禁止免费无码网站| 精品亚洲国产成人性色av| 亚洲乱色熟女一区二区蜜臀| 亚洲AV无码成H人动漫无遮挡| 谷城县|