当前位置:   article > 正文

pthread_create 所需要的时间_pthread_create耗时

pthread_create耗时

 

实际上pthread_create  应该是比较快的,但是从线程的创建到线程的调度的时间,取决于操作系统的调度算法以及硬件的性能。

但是我还是想有个大概的概念,到底是us级的还是ms级别的?

#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
void *test(void* n)
{
        //printf("thread%p:pid:%ld\n", pthread_self(), (long int)n);
        if(n == 0){
                return 0;
        }
        pthread_t id;
        if(pthread_create(&id, NULL, test, --n)) {
                fprintf(stderr, "Error creating thread\n");
                exit(0);
        }
        pthread_join(id, 0);

        return 0;
}
int main()
{
        struct timeval tv0, tv1;
        struct timezone tz0, tz1;
        gettimeofday(&tv0, &tz0);
        test((void*)100);
        gettimeofday(&tv1, &tz1);

        long int a = (tv1.tv_sec - tv0.tv_sec)*1000000 + tv1.tv_usec - tv0.tv_usec;
        printf("time =%lfms\n", (double)a/1000);

}

time =6.976000ms

从这里看,一个线程的生命周期差不多为70us

 

再看第二个测试代码:

void * kkk(void * n)
{
        printf("%ld\n", (long int)n);
        return 0;
}
void *test2()
{
        struct timeval tv0, tv1;
        struct timezone tz0, tz1;

        gettimeofday(&tv0, &tz0);

        pthread_t id[100];
        for(int i = 0; i < 100; i++){
                if(pthread_create(&id[i], NULL, kkk, (void*)i)){
                        fprintf(stderr, "Error creating thread\n");
                        exit(0);
                }
        }

        gettimeofday(&tv1, &tz1);
        long int a = (tv1.tv_sec - tv0.tv_sec)*1000000 + tv1.tv_usec - tv0.tv_usec;
        printf("time =%lfms\n", (double)a/1000);

        sleep(1);
        gettimeofday(&tv0, &tz0);
        for(int i = 0; i < 100; i++){
                pthread_join(id[i], 0);
        }
        gettimeofday(&tv1, &tz1);
        a = (tv1.tv_sec - tv0.tv_sec)*1000000 + tv1.tv_usec - tv0.tv_usec;
        printf("time =%lfms\n", (double)a/1000);

}
int main()
{
        test2();
        return 0;

}

执行结果:
0
3
2
1
4
7
8
6
9
14

....

.....
time =3.199000ms
99
time =0.533000ms

从上面结果来看,有些线程先创建到时后面才被调度,但从创建到被调度,大约为30us。

因为pthread 创建后立即执行,所以临时无法知道创建的时间,估计应该是10us数量级吧。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/181999
推荐阅读
相关标签
  

闽ICP备14008679号