`

多线程简单测试(输出500000000个数字)

 
阅读更多

C++代码如下:

 

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<unistd.h>
//线程的最大数量
const int THREAD_MAX_NUM = 100;
pthread_t threads[THREAD_MAX_NUM];
//线程的编号
int thread_mark[THREAD_MAX_NUM];
//平均每个线程需要打印数字的个数
int avg_num;
//线程数
int pthread_num = 1;
//数字的数目
int number_num = 1;
/*
 * 输出数字的线程函数
 */
void * output_number (void * arg){
        int thread_id = *((int*)arg);
        printf("thread_id: %d\n", thread_id);
        //计算线程输出的数字的范围
        int st = 0, ed = 1;
        st = thread_id*avg_num;
        if(thread_id == pthread_num - 1){
                ed = number_num;
        }else{
                ed = st + avg_num;
        }
        char fname[32];
        sprintf(fname, "/tmp/pthread/%d.log", thread_id);
        FILE* fp = fopen(fname, "w+");
        for(int i = st; i < ed; i++){
                //printf("%d\n", i);
                fprintf(fp, "%d\n", i);
        }
        return NULL;
}
int main(int argc, char* argv[]){
        int opt;
        while((opt=getopt(argc, argv,"p:n:h"))!=-1){
                switch(opt){
                        case 'p':
                                pthread_num = atoi(optarg);
                                break;
                        case 'n':
                                number_num = atoi(optarg);
                                break;
                }
        }
        if(pthread_num < 1){
                pthread_num = 1;
        }
        if(number_num < 1){
                number_num = 1;
        }
        avg_num = number_num / pthread_num; 
        printf("pthread_num: %d\n", pthread_num);
        for(int i = 0; i < pthread_num; i++){
                thread_mark[i] = i;
                pthread_create(threads+i, NULL, output_number, thread_mark+i);
        }
        for(int i = 0; i < pthread_num; i++){
                pthread_join(threads[i], NULL);
        }
        //sleep(2);
        return 0;
}

 测试情况如下:

 

  1个线程(单位:秒) 6个线程(单位:秒) 12个线程(单位:秒) 15个线程(单位:秒) 16个线程(单位:秒)
均值 73.351 11.9015 9.0455 7.604 7.5105
  71.166 11.818 8.388 8.079 8.482
  74.6 12.078 16.865 6.898 8.702
  72.26 12.27 8.478 6.749 11.197
  73.475 11.954 7.087 6.895 7.547
  75.536 11.985 9.703 7.129 6.539
分享到:
评论

相关推荐

    多线程技术在数据实时采集分析中的应用.doc

    数字接口测试系统根据数字接口设备的工作原理,输出422串行数据和自定义串行总线的控制信号(YCK,YZM)给数字接口设备,并对其输出的串行数据(YDATA)进行采集、存储、分析和处理,从而达到对被测设备进行检测的...

    多线程技术在数据实时采集分析中的应用

    本数字接口测试系统共提供了八个测试通道,每个通道的422串行总线和自定义串行总线的相关参数都可由测试人员通过应用软件进行设置。为方便对数据进行分析,同时在软件上约定了发送的数据格式为:AA xx 01 23 45 67 ...

    MultithreadedElevator:使用多线程模拟电梯系统

    这是什么? 这是“电梯系统”的模拟器。 这段代码模拟了一个 16 部电梯的系统。 从可用的 16 部电梯中选出最佳电梯来满足任何楼层的电梯需求。 编译 要编译运行, mvn compile ... 数字 16 在这里是一个任意选择

    超易上手的API自动化测试平台源代码

    使用python的Django框架,核心使用定时任务、多线程、requests实现接口自动化 2、前端:请求后端接口,实现跟测试人员交互,测试环境录入、接口录入、用例录入、扩展脚本录入、制定执行计划、计划组,观看测试报告...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

    通过本书和示例中所用的免费工具,你可以将安全因素加入到你的测试套装中,从而得以睡个安稳觉。 作者简介  Paco Hope,是Cigital公司的一名技术经理,《Mastering FreeBsD and 0penBsDsecurity》 (由O’Reilly...

    LabVIEW高级编程与虚拟仪器工程应用

    3.3.3 LabVIEW实现多线程的方法 3.4程序性能优化 3.4.1程序运行速度 3.4.2 内存使用 3.5程序性能分析 第4章软件接口与外部数据通信 4.1 ActiveX技术应用 4.1.1 ActiveX技术简介 4.1.2使用ActiveX控件 4.1.3...

    MSMQ性能试用.exe

    基于.net farmework 4.0开发的MSMQ性能测试工具,使用多线程技术.同时测试写入出取出,输出的数字为第秒处理包个数.

    Java开发技术大全(500个源代码).

    converseNumber.java 逆向输出数字 daffodilNumber.java 求水仙花数 division.java 演示整除结果 errorCompoundVariable.java 错误使用局部变量示例 factorial.java 求阶乘 Fibonacci.java 求Fiblnacci数列 ...

    DHCP客户端测试软件(dhcp for xcap)

    2, 解决解析option字段, 若字段中存在多个value时存在丢失的问题; 3, 增加鼠标点击状态显示气泡信息; 4, 增加隔行显示不同颜色; V1.0.3 1, 修改dhcp的状态机, 之前的版本是收到报文则发送request, 之后收到报文则...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    JAVA上百实例源码以及开源项目源代码

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    java开源包1

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包11

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包2

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包3

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包6

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包5

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包10

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包4

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

Global site tag (gtag.js) - Google Analytics