zoukankan      html  css  js  c++  java
  • linux时间片测试

    如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU 当即进行切换

    测试条件
    单核CPU

    示例代码

    #include <stdio.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <sys/time.h>
    
    void time_print()
    {
            struct timeval tv; 
            gettimeofday(&tv,NULL);
            printf("microsecond:%ld
    ",tv.tv_sec*1000000 + tv.tv_usec);  //微秒
    }
    
    void *fun(void *arg)
    {
            printf("I'm thread, Thread ID = %lu
    ", pthread_self());
            while(1)
            {   
                    time_print();
                    usleep(10);
            }   
            return NULL;
    }
    
    void *fun1(void *arg)
    {
            printf("I'm thread 1, Thread ID = %lu
    ", pthread_self());
            while(1)
            {   
                    sleep(1);
            }   
            return NULL;
    }
    
    int main()
    {
            pthread_t tid;
            pthread_t tid1;
    
            pthread_create(&tid, NULL, fun, NULL);
            pthread_create(&tid, NULL, fun1, NULL);
    
            void *status;
            pthread_join(tid, &status);
    
            return 0;
    }
    

    效果

    microsecond:1281790443
    microsecond:1281790572
    microsecond:1281790939
    microsecond:1281791501
    microsecond:1281791891
    microsecond:1281792407
    microsecond:1281792877
    microsecond:1281793379
    microsecond:1281793868
    microsecond:1281794393
    microsecond:1281794901
    microsecond:1281795347
    microsecond:1281795866
    microsecond:1281796399
    microsecond:1281796968
    microsecond:1281797427
    microsecond:1281797955
    microsecond:1281798403
    microsecond:1281798513
    microsecond:1281798708
    microsecond:1281798862
    microsecond:1281799380
    microsecond:1281799859
    microsecond:1281800359
    microsecond:1281800835
    microsecond:1281801364
    microsecond:1281801822
    microsecond:1281802345
    microsecond:1281802835
    microsecond:1281803318
    microsecond:1281803832
    microsecond:1281804282
    microsecond:1281804809
    microsecond:1281805349
    

    代码修改

    void *fun1(void *arg)
    {
            printf("I'm thread 1, Thread ID = %lu
    ", pthread_self());
            while(1)
            {   
                    //sleep(1);
            }   
            return NULL;
    }
    

    效果

    microsecond:2104360508
    microsecond:2104360736
    microsecond:2104360960
    microsecond:2104361436
    microsecond:2104361992
    microsecond:2104362669
    microsecond:2104366038
    microsecond:2104366282
    microsecond:2104367009
    microsecond:2104367406
    microsecond:2104367803
    microsecond:2104368249
    microsecond:2104368569
    microsecond:2104369056
    microsecond:2104369396
    microsecond:2104369848
    microsecond:2104370382
    microsecond:2104371851
    microsecond:2104375930
    microsecond:2104376353
    microsecond:2104376543
    microsecond:2104377816
    

    结论
    通过第二个测试,可以看出时间片切换是ms级别的

    如有错误,欢迎指正

  • 相关阅读:
    Oracle查询当前用户和当前用户下的所有表
    poj 1222EXTENDED LIGHTS OUT
    poj 1753 Flip Game
    老李分享:loadrunner用javavuser进行接口测试
    性能测试培训:帮你定位 Linux 性能问题的 18 个命令以及工具
    cf158B(水题)
    AC自动机讲解+[HDU2222]:Keywords Search(AC自动机)
    [BZOJ2120]:数颜色(分块?)
    赋值运算,拷贝运算,运算符重载
    Fraction to Recurring Decimal(STRING-TYPE CONVERTION)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/14746002.html
Copyright © 2011-2022 走看看