Linux提高:多线程压力测试

简介: Linux提高:多线程压力测试

题目


创建一个多进程的程序,由用户输入进程个数和每个进程的运行圈数


代码



/*************************************************************************
    > File Name: main.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2021年07月14日 星期三 21时22分03秒
 ************************************************************************/
/*
此程序为线程的压力测试程序,即由用户输入线程个数和运行圈数
*/
#include <unistd.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
//线程运行圈数
int iThreadLoop = 0;
void * start_routine(void *arg)
{
  int i = 0;
  int iThreadNum = (int)arg;
  for (i = 0; i < iThreadLoop; i++) {
    printf("第 %d 个线程运行第 %d 圈!\n", iThreadNum + 1, i + 1);
  }
}
int main(int argc, char const *argv[])
{
  //线程个数
  int iThreadNum = 0;
  int i = 0;
  printf("请输入线程个数:\n");
  scanf("%d", &iThreadNum);
  printf("请输入每个线程运行圈数:\n");
  scanf("%d", &iThreadLoop);
  pthread_t *tid = (pthread_t*)malloc(sizeof(pthread_t)*iThreadNum);
  if (NULL == tid) {
    printf("申请内存失败\n");
    exit(1);
  }
  for (i = 0; i < iThreadNum; i++) {
    pthread_create(&tid[i], NULL, start_routine, (void *)i);
  }
  for (i = 0; i < iThreadNum; i++) {
    pthread_join(tid[i], NULL);
  }
  free(tid);
  tid = NULL;
  return 0;
}


知识回顾


线程


线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。


线程和进程的区别在于是否独享一段地址空间。 在 Linux 系统下:


  • 线程:是最小的执行单位。


  • 进程:是最小资源分配单位,可看成是只有一个线程的进程。


线程特点


  1. 线程是轻量级进程(light-weight process),也有 PCB,创建线程使用的底层函数和进程一样,都是 clone。


  1. 从内核里看进程和线程是一样的,都有各自不同的 PCB。


  1. 进程可以蜕变为线程。


  1. 在 linux 下,线程最是小的执行单位;进程是最小的分配资源单位


相关文章
|
1月前
|
算法 Unix Linux
linux线程调度策略
linux线程调度策略
33 0
|
9天前
|
监控 安全 Linux
如何利用Kali Linux进行网站渗透测试:最常用工具详解
如何利用Kali Linux进行网站渗透测试:最常用工具详解
40 6
|
9天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
20 2
|
14天前
|
NoSQL Linux Android开发
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
本文介绍了如何在QEMU中挂载虚拟分区、创建和编译简单的Linux内核模块,并在QEMU虚拟机中加载和测试这些内核模块,包括创建虚拟分区、编写内核模块代码、编译、部署以及在QEMU中的加载和测试过程。
75 0
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
|
20天前
|
监控 网络协议 安全
在Linux中,如何进行系统性能的峰值测试?
在Linux中,如何进行系统性能的峰值测试?
|
21天前
|
存储 Linux 测试技术
在Linux中,如何使用expect进行自动化交互式应用程序测试?
在Linux中,如何使用expect进行自动化交互式应用程序测试?
|
24天前
|
存储 设计模式 NoSQL
Linux线程详解
Linux线程详解
|
1月前
|
缓存 Linux C语言
Linux线程是如何创建的
【8月更文挑战第5天】线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。
|
20天前
|
网络协议 测试技术 Linux
在Linux中,如何进行网络性能的峰值测试?
在Linux中,如何进行网络性能的峰值测试?
|
20天前
|
监控 数据挖掘 Linux
在Linux中,如何进行网络性能的模拟测试?
在Linux中,如何进行网络性能的模拟测试?