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

Prayer

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

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
        
                由此可以得出如下結(jié)論,在 linux 2.4 下:
                        1、支持 usleep,nanosleep,select
                        2、select 的 精確度為 10毫秒。在10毫秒以上很精確
                        3、usleep, nanosleep  很不精確
                同樣,通過其它測試程序能得出如下結(jié)論:
                        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>
            在线成人小视频| 欧美mv日韩mv国产网站app| 久久av一区二区| 欧美在线一级va免费观看| 欧美亚洲一区二区在线观看| 欧美一区不卡| 你懂的国产精品| 亚洲精品一区二区三区99| 亚洲免费观看高清在线观看| 99re6热在线精品视频播放速度 | 国产热re99久久6国产精品| 欧美午夜不卡在线观看免费| 国产精品久久婷婷六月丁香| 国产精品视频自拍| 国产一区二区三区在线观看网站| 韩日精品中文字幕| 亚洲开发第一视频在线播放| 亚洲色图制服丝袜| 久久一本综合频道| 日韩亚洲欧美成人一区| 亚欧美中日韩视频| 欧美成人午夜剧场免费观看| 欧美性久久久| 在线成人亚洲| 午夜精品婷婷| 欧美电影免费网站| 中文一区二区| 国产亚洲精品久| 中国成人亚色综合网站| 亚洲欧美另类久久久精品2019| 久久精品视频在线看| 欧美成人高清| 国产亚洲精品v| 一本不卡影院| 久久最新视频| 亚洲视频一区二区在线观看| 久久久人成影片一区二区三区观看 | 在线播放日韩| 亚洲日本成人女熟在线观看| 中文久久精品| 久久亚洲综合色| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲国产成人一区| 美国三级日本三级久久99| 久久久噜噜噜久噜久久 | 国产婷婷色一区二区三区在线 | 欧美成人首页| 欧美一区二视频在线免费观看| 欧美日本视频在线| 影音先锋中文字幕一区| 欧美一区二区视频在线观看2020| 欧美电影在线播放| 久久久噜噜噜久噜久久| 国产一区二区成人| 亚洲欧洲美洲综合色网| 99国产精品久久久久久久成人热| 亚洲欧美一区二区原创| 亚洲第一黄色网| 久久久久久有精品国产| 狠狠色伊人亚洲综合成人| 一区二区欧美亚洲| 欧美99在线视频观看| 性做久久久久久久久| 国产精品自在欧美一区| 午夜精品亚洲| 亚洲一区综合| 国产精品嫩草99av在线| 亚洲女性喷水在线观看一区| 一区二区三区免费在线观看| 欧美中文在线观看| 久久综合色88| 久久手机免费观看| 国内一区二区三区在线视频| 久久精品国产精品亚洲| 亚洲一区一卡| 国产美女精品| 久久久久久香蕉网| 久久精品一区二区| 亚洲黄色免费网站| 亚洲美女毛片| 国产毛片一区| 久久综合免费视频影院| 蜜桃av噜噜一区| 亚洲一级免费视频| 欧美在线亚洲| 91久久综合亚洲鲁鲁五月天| 亚洲人成欧美中文字幕| 国产精品家庭影院| 久久九九全国免费精品观看| 久久综合狠狠综合久久激情| 日韩视频一区二区三区在线播放免费观看 | 久久福利资源站| 曰韩精品一区二区| 亚洲九九爱视频| 国产日韩一区二区三区| 男人的天堂成人在线| 欧美激情影院| 欧美影院在线| 欧美国产免费| 欧美一区日本一区韩国一区| 久久天天躁狠狠躁夜夜av| 夜夜躁日日躁狠狠久久88av| 午夜亚洲影视| 亚洲精品美女91| 午夜精品一区二区三区在线| 亚洲欧洲午夜| 亚洲综合不卡| 99国产精品| 久久精品免费| 亚洲欧美大片| 欧美精品日本| 美女啪啪无遮挡免费久久网站| 欧美日韩精品在线视频| 久久综合伊人77777尤物| 欧美午夜理伦三级在线观看| 欧美一区午夜精品| 亚洲精品视频在线看| 国产综合久久久久影院| 亚洲人成绝费网站色www| 国产精品久久久久久久电影 | 免费不卡在线观看| 国产精品你懂的在线| 欧美高清在线一区| 黄色亚洲免费| 亚洲人成在线播放网站岛国| 黄色日韩网站| 午夜精品免费| 午夜在线视频观看日韩17c| 欧美精品成人| 亚洲大片精品永久免费| 国产视频精品网| 亚洲伊人久久综合| 亚洲在线观看免费视频| 欧美激情精品久久久久久蜜臀| 久久最新视频| 狠狠色伊人亚洲综合成人| 午夜在线a亚洲v天堂网2018| 亚洲在线观看免费| 国产精品久久久久9999高清| 正在播放欧美一区| 午夜欧美大尺度福利影院在线看| 欧美日韩在线直播| 99精品免费视频| 亚洲一区二区视频在线观看| 欧美日韩一区二区三区在线看 | 国产欧美精品在线观看| 亚洲免费视频成人| 羞羞视频在线观看欧美| 国产日韩欧美麻豆| 久久精品中文| 免费欧美网站| 亚洲理伦电影| 欧美午夜剧场| 亚洲欧美日本精品| 久久久久免费| 亚洲国产视频一区| 欧美欧美天天天天操| 99精品久久久| 欧美主播一区二区三区美女 久久精品人| 国产精品久久久久久久免费软件 | 亚洲精品美女久久7777777| 亚洲欧洲一区二区三区在线观看| 久久性天堂网| 日韩视频精品| 久久er精品视频| 亚洲精品社区| 国产精品一区二区在线观看| 久久精品国产亚洲一区二区三区| 亚洲第一区在线| 亚洲在线免费观看| 在线播放中文字幕一区| 欧美精品粉嫩高潮一区二区 | 欧美黄在线观看| 亚洲天堂第二页| 久久精品国产在热久久 | 国产精品入口麻豆原神| 欧美亚洲三区| 亚洲国产高清高潮精品美女| 亚洲综合色在线| 亚洲国产99精品国自产| 国产精品国产自产拍高清av| 久久精品色图| 一本色道久久综合亚洲91| 久久精品视频在线播放| 亚洲私人影院| 亚洲福利专区| 国产亚洲欧美一级| 欧美日韩国产影片| 久久精品女人| 午夜天堂精品久久久久| 99国产精品久久久久久久| 女人香蕉久久**毛片精品| 欧美一区二区三区四区在线观看地址| 亚洲国产婷婷香蕉久久久久久99| 国产欧美一区二区精品性| 欧美日韩中文字幕在线| 欧美成人一区在线| 老司机午夜精品| 久久免费视频一区| 欧美在线播放高清精品|