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