Linux提高:多线程压力测试
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 系统下:
-
线程:是最小的执行单位。
-
进程:是最小资源分配单位,可看成是只有一个线程的进程。
线程特点
- 线程是轻量级进程(light-weight process),也有 PCB,创建线程使用的底层函数和进程一样,都是 clone。
- 从内核里看进程和线程是一样的,都有各自不同的 PCB。
- 进程可以蜕变为线程。
- 在 linux 下,线程最是小的执行单位;进程是最小的分配资源单位
以上是关于Linux提高:多线程压力测试的主要内容,如果未能解决你的问题,请参考以下文章