Casovani usleep versus select?

Petr Šobáň soban na centrum.cz
Pátek Listopad 28 20:51:55 CET 2003


Ladislav Vaiz napsal(a):
> Dobry den,
> nasledujici program ceka ruznymi metodami jednu mikrosekundu. Je mi jasne,
> ze na i386 s casovacem 100Hz  bude doba cekani minimalne 10 milisekund.
> To sedi pro cekani funkci select. Proc ale usleep ceka 20ms?
> 
> Vystup programu. Velice podobne vypada na procesorech 486-Duron nezavisle
> na zatizeni ostatnimi procesy:
> 
> testing usleep
> average delay: 20424 us
> testing select
> average delay: 10095 us
> 
> A slibeny program:

> 
>     sum=0;
>     printf("testing usleep\n");
>     for (i=0; i<N; i++){
>         gettimeofday(&a, NULL);



>         usleep(1);

Problém bude zde když jsem udělal pouze

         gettimeofday(&a, NULL);
         usleep(100000);
         gettimeofday(&b, NULL);

         d=b.tv_usec-a.tv_usec;
         d+=((b.tv_sec-a.tv_sec)*1000000);

         sum+=d;

     printf("average delay: %lld us\n", sum/N);

Tak to začalo vypisovat celkem smysluplné udaje, ale při menším čekání 
usleep( <100000) tak už to začalo blbnout.

Při 1 je

testing usleep
average delay: 239 us

Takže špatně napsaná funkce, nebo nestíhá PC athlon 1,7G :-) a protože 
druhá část programu funguje tak špatná funkce.

>         gettimeofday(&b, NULL);
> 
>         d=b.tv_usec-a.tv_usec;
>         d+=(b.tv_sec-a.tv_sec)*1000000;
> 
>         sum+=d;
>     }



-- 

/----------------------------------------\
|            Petr Šobáň                  |
|            Olomouc                     |
|----------------------------------------|
|    ICQ    179223500                    |
\----------------------------------------/



Další informace o konferenci Linux