Casovani usleep versus select?
Ladislav Vaiz
ziav na adela.fel.zcu.cz
Pátek Listopad 28 12:37:59 CET 2003
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:
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
long long sum;
#define N 100
int main(void){
long i, d;
struct timeval a, b;
sum=0;
printf("testing usleep\n");
for (i=0; i<N; i++){
gettimeofday(&a, NULL);
usleep(1);
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);
sum=0;
printf("testing select\n");
for (i=0; i<N; i++){
struct timeval tv;
gettimeofday(&a, NULL);
tv.tv_sec=0;
tv.tv_usec=1;
select(0, NULL, NULL, NULL, &tv);
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);
}
La'd"a
__... ...__ _.. . ___ _._ .____ __.. .. ._
V určitém okamžiku se z každého nářadí stává kladivo.
Další informace o konferenci Linux