`

多线程简单测试(输出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
分享到:
评论

相关推荐

    多线程实现文件中字母数字及其他字符的分配

    在给定的“多线程实现文件中字母数字及其他字符的分配”项目中,我们看到一个旨在利用多线程来读取文件、分析字符并进行某种形式的分配的任务。下面我们将深入探讨这个主题,包括多线程的基本概念、Linux环境下的...

    java10个线程按照顺序打印1-100

    在Java编程中,多线程同步是一个常见的挑战,特别是在需要线程按照特定顺序执行任务时。本主题聚焦于如何使用Java实现10个线程按照顺序打印数字1到100。这种问题通常通过线程间通信和同步机制来解决,如`...

    C简易自动化测试框架

    然而,由于C语言本身的限制,实现并发和多线程需要谨慎处理内存管理和同步问题。 8. **可扩展性**:一个良好的测试框架应该容易扩展,允许添加新的测试功能或适配不同的项目需求。 总之,虽然这个“C简易自动化...

    ( 第10篇-QTP输出值技术

    5. 多线程测试:在多线程环境下,使用`RunAction`命令时,需要考虑输出值的同步问题,确保正确读取和写入。 QTP自动化测试视频系列中,第10讲会深入探讨如何利用QTP的输出值技术来设计和实现高效的自动化测试方案。...

    黑客帝国的数字雨--絕笹の負卿

    4. **延时与多线程**:为了使数字雨有视觉上的下落感,可能需要使用`sleep()`函数或者异步操作来实现短暂的延迟。此外,如果想要数字雨同时从屏幕顶部不同位置开始下落,可以利用多线程技术。 5. **循环与条件判断*...

    java基础测试题及答案

    此外,北大青鸟作为知名的IT培训机构,其教学内容通常会遵循一个系统的学习路径,包括基础语法、面向对象编程、异常处理、输入输出、集合框架、多线程、网络编程等。因此,这个测试题集不仅是对个人学习进度的检测,...

    socket 简单测试

    此外,多线程技术常被用于处理多个并发客户端的连接请求,以提高服务器的处理能力。 总的来说,Socket编程是构建网络应用的基础,通过它我们可以实现跨网络的交互,如聊天应用、文件传输、远程控制等。"socket简单...

    Java并发中的线程安全性

    运行上述代码,可以看到输出的结果中可能会有重复的数字出现,这是因为`getNext()`方法没有正确处理多线程间的同步问题,导致`value`变量的更新顺序无法预测。 #### 3. 线程安全性的等级 ##### 3.1 Bloch的安全...

    数字电路仿真的Java实现.pdf

    软件的设计和实现采用了多线程的方法,引脚状态的变化触发一个器件的运算任务,但这时并不执行该任务,而是要等所有的引脚变化都处理结束,这就实现了节点状态在一个时间点发生变化。 在仿真输出中,我们使用了仿真...

    C++基于神经网络的数字识别代码

    在C++中实现神经网络可能涉及到多线程、内存管理等复杂问题,因此需要良好的编程技巧和对算法的理解。同时,理解并优化网络架构,如层数、每层的神经元数量、激活函数的选择(如sigmoid、ReLU或tanh),都是提高模型...

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

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

    一亿取100数字Top100

    6. **并行计算**:如果硬件支持,可以使用多线程或者分布式计算框架(如Hadoop或Spark),将数据分割成多个部分并行处理,进一步提高效率。 描述中提到的“几行代码就行”,暗示了这个问题可以通过简洁高效的编程...

    常用嵌入式系统软件仿真自动化黑盒测试平台.docx

    9. 支持时序测试和多线程任务测试,适应不同测试场景。 10. 灵活扩展,适应大、中、小规模测试环境。 11. 可集成其他测试设备,如函数发生器、示波器等。 **QTP简介** QuickTest Professional (QTP) 是一款功能...

    c++数字电子钟

    8. **多线程**:为了不让电子钟更新影响到其他任务,可以考虑使用多线程技术,让时间更新和主程序逻辑分别在不同的线程中执行。 9. **实践与调试**:编写完成后,需要进行充分的测试,确保在不同环境下都能正确显示...

    四路高速脉冲输出例程.zip

    四路高速脉冲输出例程是一...总的来说,四路高速脉冲输出例程是一个综合性的嵌入式系统编程实践,涵盖了硬件接口、定时器配置、中断服务、多线程编程等多个方面,对于理解并掌握微控制器的高级应用具有很高的学习价值。

    C#编写的拼数字游戏

    8. **多线程**:在更复杂的游戏设计中,可能需要利用C#的多线程特性,如创建一个独立的线程来处理计时或更新游戏状态。 9. **调试与测试**:Visual Studio作为C#的主要开发环境,提供了强大的调试工具,可以帮助...

Global site tag (gtag.js) - Google Analytics