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

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>
            日韩一级在线观看| 国产精品国产三级国产| 亚洲区一区二区三区| 午夜精品久久久| 亚洲欧美日韩国产另类专区| 一区二区三区www| 美女91精品| 欧美国产视频在线观看| 亚洲国产视频一区二区| 亚洲二区视频| 亚洲精品乱码久久久久久| 日韩视频免费看| 一区二区精品国产| 午夜精品久久久久久99热软件| 欧美伊人久久| 欧美a级片一区| 国产精品v一区二区三区| 国产喷白浆一区二区三区| 尤物九九久久国产精品的分类| 亚洲高清免费| 亚洲一级黄色片| 久久久www成人免费毛片麻豆| 女人香蕉久久**毛片精品| 亚洲精品亚洲人成人网| 午夜一级久久| 欧美久久影院| 韩国女主播一区二区三区| 99国产精品久久久久久久成人热| 亚洲欧美国产77777| 女同性一区二区三区人了人一| 久久久综合网| 亚洲品质自拍| 午夜一区在线| 亚洲东热激情| 亚洲一区在线免费| 欧美第一黄网免费网站| 国产精品亚洲综合| 美国十次成人| 麻豆精品在线视频| 欧美成人r级一区二区三区| 日韩网站在线观看| 欧美福利一区二区| 国产精品久久看| 亚洲成色777777在线观看影院| 狠狠色综合网站久久久久久久| 中文国产成人精品久久一| 亚洲男人天堂2024| 亚洲三级观看| 欧美激情黄色片| 亚洲婷婷综合久久一本伊一区| 亚洲一区二区毛片| 国产精品久久二区| 欧美三日本三级少妇三2023| 久久精品毛片| 欧美一区二区播放| 欧美日精品一区视频| 最近中文字幕日韩精品| 美女主播精品视频一二三四| 亚洲综合好骚| 国产精品视区| 欧美一区二区三区久久精品茉莉花| 亚洲美女精品成人在线视频| 欧美mv日韩mv亚洲| 亚洲乱码国产乱码精品精可以看 | 亚洲在线播放电影| 欧美日韩一区二区视频在线观看| 日韩视频欧美视频| 亚洲美女91| 欧美午夜精品一区二区三区| 亚洲综合二区| 午夜精品一区二区三区在线视| 国产欧美日韩一区二区三区在线观看 | 99re6热只有精品免费观看| 欧美激情精品久久久久久大尺度| 久久午夜精品一区二区| 久久免费精品日本久久中文字幕| 亚洲自拍三区| 国内视频一区| 欧美激情国产高清| 免费看成人av| 亚洲欧洲日本在线| 欧美mv日韩mv亚洲| 亚洲午夜精品福利| 西西裸体人体做爰大胆久久久| 国产手机视频精品| 欧美高清成人| 欧美色另类天堂2015| 欧美一区1区三区3区公司| 久久精品中文字幕免费mv| 亚洲精品国产品国语在线app| 一本久道综合久久精品| 国产主播一区二区三区四区| 欧美激情视频在线播放 | 一区二区三区欧美亚洲| 亚洲永久网站| 亚洲精品一级| 亚洲在线一区二区| 一区二区亚洲精品国产| 99精品视频免费全部在线| 国产婷婷成人久久av免费高清 | 午夜久久久久久久久久一区二区| 亚洲在线观看视频| 亚洲一区日本| 午夜精品久久久久久久蜜桃app| 国内精品久久久久久影视8 | 亚洲激情二区| 国产欧美 在线欧美| 欧美+日本+国产+在线a∨观看| 欧美日韩国产一区二区三区地区| 久久精品av麻豆的观看方式| 欧美国产免费| 久久久久成人精品| 欧美日韩一区二区三区视频| 免费看的黄色欧美网站| 国产精品入口| 亚洲毛片视频| 亚洲精品久久久久久久久久久久久| 亚洲午夜久久久久久久久电影院 | 欧美成熟视频| 欧美一区二区三区在线视频| 欧美激情免费在线| 久久国产日韩| 欧美视频精品在线| 欧美黄色小视频| 国产免费成人在线视频| 免费在线观看成人av| 欧美日韩小视频| 欧美激情91| 激情久久久久| 欧美在线免费看| 欧美一区二区三区在线观看视频| 欧美日韩 国产精品| 亚洲福利国产精品| 亚洲成人在线视频网站| 久久精品官网| 久久久久国产精品一区三寸 | 亚洲欧美视频在线观看视频| 亚洲天堂成人在线视频| 欧美乱在线观看| 亚洲日本欧美日韩高观看| 亚洲高清色综合| 美日韩在线观看| 亚洲第一福利社区| 亚洲精品欧美日韩专区| 欧美福利一区二区| 亚洲毛片在线| 午夜精品久久久99热福利| 国产精品久久久久久久午夜片| 一区二区三区四区国产精品| 亚洲图片欧美日产| 国产精品免费在线| 香蕉av777xxx色综合一区| 久久久av水蜜桃| 一色屋精品视频在线看| 老巨人导航500精品| 欧美激情在线狂野欧美精品| 亚洲精品在线电影| 欧美性猛交xxxx免费看久久久| 中文av字幕一区| 久久久久久久欧美精品| 亚洲电影在线播放| 欧美第一黄网免费网站| 亚洲视频观看| 欧美在线网站| 亚洲国产精品va在线看黑人动漫 | 狠狠v欧美v日韩v亚洲ⅴ| 久久久欧美一区二区| 亚洲精品色图| 欧美一区二区视频97| 一区二区三区在线免费播放| 你懂的一区二区| 一区二区三区日韩欧美精品| 亚洲影院污污.| 国产主播精品在线| 欧美日韩国产区| 午夜伦理片一区| 最新国产乱人伦偷精品免费网站| 亚洲资源在线观看| 亚洲高清资源| 国产精品久久久久999| 久久久久久黄| 一区二区欧美日韩视频| 免费在线亚洲| 亚洲综合不卡| 亚洲精品美女在线观看播放| 国产精品视频网站| 欧美福利影院| 久久狠狠婷婷| av成人老司机| 欧美国产精品va在线观看| 欧美一区二区福利在线| 一本久道久久综合中文字幕| 欧美一区二区在线观看| 亚洲精品一区在线| 久久久女女女女999久久| 亚洲视频一区二区在线观看| 亚洲大片在线观看| 国产麻豆综合| 欧美天天在线| 欧美国产日韩一区二区在线观看 |