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