青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

sleep usleep select 延時比較

Posted on 2008-08-21 19:18 Prayer 閱讀(2071) 評論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX

 再論精確延時(usleep,nanosleep,select)

/*
        make:  gcc -o test_sleep test_sleep.c
*/
/*        #include  "comm_main.h" */
#include <stdio.h>;
#include <stdlib.h>;
#include <time.h>;
#include <sys/time.h>;
#include <errno.h>;
#include <string.h>;
#include <unistd.h>;
#include <sys/types.h>;

#define PRINT_USEAGE  { \
   fprintf(stderr,"\n Usage: %s usec ",argv[0]); \
   fprintf(stderr,"\n\n");\
  }

int
main (int argc, char **argv)
{
  unsigned int nTimeTestSec = 0;        /* sec */
  unsigned int nTimeTest = 0;        /* usec */
  struct timeval tvBegin;
  struct timeval tvNow;
  int ret = 0;
  unsigned int nDelay = 0;        /* usec */
  fd_set rfds;
  struct timeval tv;
  int fd = 1;
  int i = 0;
  struct timespec req;
  unsigned int delay[20] =
    { 500000, 100000, 50000, 10000, 1000, 900, 500, 100, 10, 1, 0 };
  int nReduce = 0;                /* 誤差  */

#if 0
  if (argc < 2)
    {
      PRINT_USEAGE;
      exit (1);
    }
  nDelay = atoi (argv[1]);
#endif

  fprintf (stderr, "%18s%12s%12s%12s\n", "function", "time(usec)", "realTime",
           "reduce");
  fprintf (stderr,
           "-------------------------------------------------------------------\n");

  for (i = 0; i < 20; i++)
    {
      if (delay[i] <= 0)
        break;
      nDelay = delay[i];

      /*      test usleep */
      gettimeofday (&tvBegin, NULL);
      ret = usleep (nDelay);
      if (-1 == ret)
        {
          fprintf (stderr, " usleep error . errno=%d [%s]\n", errno,
                   strerror (errno));
        }
      gettimeofday (&tvNow, NULL);
      nTimeTest =
        (tvNow.tv_sec - tvBegin.tv_sec) * 1000000 + tvNow.tv_usec -
        tvBegin.tv_usec;
      nReduce = nTimeTest - nDelay;
      fprintf (stderr, "\t usleep       %8u   %8u   %8d\n", nDelay, nTimeTest,nReduce);


      /*      test nanosleep */
      gettimeofday (&tvBegin, NULL);
      req.tv_sec = nDelay / 1000000;
      req.tv_nsec = (nDelay % 1000000) * 1000;
      ret = nanosleep (&req, NULL);
      if (-1 == ret)
        {
          fprintf (stderr, "\t nanosleep    %8u   not support\n", nDelay);
        }
      else
        {
          gettimeofday (&tvNow, NULL);
          nTimeTest =
            (tvNow.tv_sec - tvBegin.tv_sec) * 1000000 + tvNow.tv_usec -
            tvBegin.tv_usec;
          nReduce = nTimeTest - nDelay;
          fprintf (stderr, "\t nanosleep    %8u   %8u   %8d\n", nDelay,
                   nTimeTest, nReduce);
        }

      /*      test select */
      gettimeofday (&tvBegin, NULL);
      FD_ZERO (&rfds);
      FD_SET (fd, &rfds);
      tv.tv_sec = 0;
      tv.tv_usec = nDelay;
      ret = select (0, NULL, NULL, NULL, &tv);
      if (-1 == ret)
        {
          fprintf (stderr, " select error . errno=%d [%s]\n", errno,
                   strerror (errno));
        }
      gettimeofday (&tvNow, NULL);
      nTimeTest =
        (tvNow.tv_sec - tvBegin.tv_sec) * 1000000 + tvNow.tv_usec -
        tvBegin.tv_usec;
      nReduce = nTimeTest - nDelay;
      fprintf (stderr, "\t select       %8u   %8u   %8d\n", nDelay, nTimeTest,
               nReduce);

    }

  return 0;
}

---------------------------------------------------------------------------------------------------------------------------------------------------

測試
IBM AIX 3.4 單CPU
        sleep  可以在多線程中使用,只阻塞本線程,不影響所屬進程中的其它線程
        不支持 nanosleep
        支持 usleep  和 select
        以下采用 gettimeofday 對 usleep 和 select 的實際精確情況進行測試分析
          function  time(usec)    realTime      reduce
-------------------------------------------------------------------
         usleep         500000     500026         26
         nanosleep      500000   not support
         select         500000     500026         26
         usleep         100000     100021         21
         nanosleep      100000   not support
         select         100000     100025         25
         usleep          50000      50021         21
         nanosleep       50000   not support
         select          50000      50107        107
         usleep          10000      10099         99
         nanosleep       10000   not support
         select          10000      10025         25
         usleep           1000       1021         21
         nanosleep        1000   not support
         select           1000       1024         24
         usleep            900        920         20
         nanosleep         900   not support
         select            900       1024        124
         usleep            500        523         23
         nanosleep         500   not support
         select            500       1024        524
         usleep            100        119         19
         nanosleep         100   not support
         select            100       1023        923
         usleep             10         31         21
         nanosleep          10   not support
         select             10       1024       1014
         usleep              1         19         18
         nanosleep           1   not support
         select              1       1026       1025

       
        由此可以得出,在AIX 3.4下:
                select 只能精確到毫秒級別
                usleep 可以精確到微秒級
                在1毫秒以上,兩者的精確度基本一樣

同上,在 linux 2.4.20-8smp 雙CPU 下測試
          function  time(usec)    realTime      reduce
-------------------------------------------------------------------
         usleep         500000     506453       6453
         nanosleep      500000     509930       9930
         select         500000     499990        -10
         usleep         100000     110023      10023
         nanosleep      100000     109955       9955
         select         100000      99992         -8
         usleep          50000      59971       9971
         nanosleep       50000      59990       9990
         select          50000      50025         25
         usleep          10000      19991       9991
         nanosleep       10000      19988       9988
         select          10000       9956        -44
         usleep           1000      19990      18990
         nanosleep        1000      19989      18989
         select           1000      10024       9024
         usleep            900      20009      19109
         nanosleep         900      19972      19072
         select            900       9943       9043
         usleep            500      19975      19475
         nanosleep         500      19971      19471
         select            500      10012       9512
         usleep            100      19975      19875
         nanosleep         100      19976      19876
         select            100       9943       9843
         usleep             10      19988      19978
         nanosleep          10      19961      19951
         select             10      10011      10001
         usleep              1      19978      19977
         nanosleep           1      19985      19984
         select              1       9932       9931
在 2.4.21-4.ELsmp #1 SMP  4 CPU 下測試
           function  time(usec)    realTime      reduce
-------------------------------------------------------------------
         usleep         500000     501267       1267
         nanosleep      500000     509964       9964
         select         500000     499981        -19
         usleep         100000     109944       9944
         nanosleep      100000     109925       9925
         select         100000      99963        -37
         usleep          50000      59904       9904
         nanosleep       50000      59973       9973
         select          50000      49956        -44
         usleep          10000      19988       9988
         nanosleep       10000      20008      10008
         select          10000      10020         20
         usleep           1000      19988      18988
         nanosleep        1000      19980      18980
         select           1000       9943       8943
         usleep            900      19975      19075
         nanosleep         900      19986      19086
         select            900       9905       9005
         usleep            500      19989      19489
         nanosleep         500      19910      19410
         select            500      10000       9500
         usleep            100      19355      19255
         nanosleep         100      19902      19802
         select            100       9988       9888
         usleep             10      19977      19967
         nanosleep          10      19988      19978
         select             10       9943       9933
         usleep              1      20007      20006
         nanosleep           1      19947      19946
         select              1       9980       9979
        
                由此可以得出如下結論,在 linux 2.4 下:
                        1、支持 usleep,nanosleep,select
                        2、select 的 精確度為 10毫秒。在10毫秒以上很精確
                        3、usleep, nanosleep  很不精確
                同樣,通過其它測試程序能得出如下結論:
                        sleep  可以在多線程中使用,只阻塞本線程,不影響所屬進程中的其它線程

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产自产2019最新不卡| 免费黄网站欧美| 国产日韩精品视频一区二区三区| 亚洲麻豆av| 亚洲精品一区二区三区福利| 欧美一区二区视频观看视频| 99re8这里有精品热视频免费| 国产日韩欧美在线一区| 欧美日韩免费| 国产精品国产三级国产专播精品人 | 中文一区二区| 日韩一级黄色大片| 午夜精品理论片| 久久久亚洲国产天美传媒修理工 | 久久精品123| 美国十次了思思久久精品导航| 欧美 日韩 国产精品免费观看| 欧美国产精品v| 国产日本欧美一区二区三区| 亚洲国产欧美国产综合一区| 亚洲一区影音先锋| 欧美激情一区二区三区不卡| 在线 亚洲欧美在线综合一区| 国产日韩欧美二区| 亚洲视频精品在线| 亚洲国产精品999| 这里只有精品丝袜| 欧美人与禽猛交乱配视频| 国产热re99久久6国产精品| 这里只有精品丝袜| 亚洲精品激情| 欧美成人激情视频免费观看| 国内在线观看一区二区三区| 先锋影音国产一区| 一本色道久久综合亚洲精品不| 免费观看在线综合| 国产精品chinese| 艳妇臀荡乳欲伦亚洲一区| 欧美成人一区二区三区在线观看 | 国产自产高清不卡| 美国成人毛片| 欧美在线视频不卡| 在线观看91精品国产入口| 久久久国产精品一区二区三区| 午夜精品久久久久久久99热浪潮| 国产精品无码永久免费888| 欧美综合国产| 欧美成年视频| 久久精品国产免费观看| 久久久精品午夜少妇| 亚洲第一福利视频| 99re66热这里只有精品4| 国产亚洲精品久久飘花| 国产精品日韩在线播放| 欧美一区二区三区日韩视频| 久久久青草婷婷精品综合日韩| 伊甸园精品99久久久久久| 亚洲第一偷拍| 国产精品一区二区三区观看| 欧美激情乱人伦| 激情综合色丁香一区二区| 亚洲精品国产系列| 国产欧美在线播放| 亚洲精品乱码久久久久久蜜桃91| 国产一区二区福利| 亚洲精品小视频在线观看| 国产日韩亚洲欧美精品| 99国产精品| 亚洲日本中文字幕区| 久久精品国产999大香线蕉| 99热这里只有精品8| 欧美成人首页| 亚洲国产精品尤物yw在线观看| 国内外成人免费激情在线视频 | 一区二区三区欧美激情| 久久久噜噜噜久久中文字免| 亚洲欧美日韩中文播放| 欧美日韩国产精品自在自线| 亚洲高清不卡在线| 亚洲精品一区在线| 欧美午夜一区| 亚洲欧美在线免费观看| 美女任你摸久久| 亚洲午夜免费视频| 国产伦精品一区二区| 久久福利一区| 亚洲电影免费在线| 亚洲一级网站| 在线观看亚洲精品视频| 欧美成人亚洲成人| 亚洲看片免费| 国产日韩欧美亚洲| 久久久久久久一区二区| 亚洲国产精品999| 亚洲欧美日韩精品一区二区| 亚洲电影网站| 欧美日韩亚洲视频| 亚洲一区二区三区在线看| 久久视频精品在线| 亚洲欧美日韩综合| 欧美一级视频精品观看| 免费视频久久| 欧美成人久久| 极品中文字幕一区| 免费看av成人| 欧美一区二区三区久久精品茉莉花| 久久精品国产77777蜜臀| 亚洲国产日韩欧美在线99| 欧美午夜欧美| 麻豆成人综合网| 久久久久久有精品国产| 在线亚洲一区观看| 最新亚洲电影| 欧美黄色影院| 免费看成人av| 久久综合色综合88| 久久视频在线视频| 免费观看亚洲视频大全| 久久精品1区| 久久久www成人免费无遮挡大片| 在线视频亚洲欧美| 午夜精品视频网站| 久久久久**毛片大全| 老色鬼精品视频在线观看播放 | 欧美中在线观看| 亚洲欧美自拍偷拍| 久久亚洲图片| 久久夜色精品国产欧美乱极品| 亚洲午夜精品在线| 亚洲一区高清| 一区二区三区国产精华| 亚洲欧美成人综合| 欧美 日韩 国产在线| 日韩午夜剧场| 国产亚洲福利| 亚洲国产精品毛片| 亚洲一区免费| 亚洲大胆人体在线| 亚洲私人影吧| 欧美国产视频在线| 国产日韩欧美精品综合| 亚洲精品一二三| 久久久国产精品一区二区中文| 免费亚洲电影在线观看| 一区二区三区毛片| 久久中文在线| 国产日韩欧美中文| 亚洲欧美成人一区二区在线电影| 欧美va天堂va视频va在线| 亚洲网址在线| 国产精品swag| 一本大道久久精品懂色aⅴ| 欧美**字幕| 久久香蕉国产线看观看av| 国产精品稀缺呦系列在线| 在线中文字幕不卡| 一区二区三区久久久| 欧美伦理在线观看| 91久久国产精品91久久性色| 久久五月激情| 老色鬼精品视频在线观看播放| 欧美.www| 欧美福利视频| 在线中文字幕一区| 亚洲视频欧美视频| 国产在线一区二区三区四区| 久久爱www| 麻豆精品传媒视频| 日韩午夜精品| 亚洲一区二区三区在线播放| 这里只有精品视频| 欧美日韩精品一区视频| 亚洲一区二区三区涩| 亚洲美女中出| 国产日韩欧美制服另类| 久久九九国产精品| 欧美日韩亚洲一区三区| 午夜视频久久久久久| 欧美中文字幕精品| 亚洲国产精品视频一区| 欧美激情一区| 国产美女一区二区| 亚洲国产欧美日韩精品| 国产精品视频久久久| 久久先锋影音av| 国产精品夫妻自拍| 欧美激情中文字幕乱码免费| 国产精品s色| 亚洲作爱视频| 一本久久综合亚洲鲁鲁| 久久综合色天天久久综合图片| 亚洲自拍16p| 欧美三区在线| 99精品视频免费全部在线| 99国产精品国产精品久久| 欧美国产三区| 最新国产成人在线观看| 亚洲激情小视频| 欧美电影免费观看高清完整版| 免费看成人av|