如何修改进程中活动的线程最大数?

发布于 2022-10-02 05:13:51 字数 208 浏览 19 评论 0

试验:
系统:   Redhat 9
编译器: G++

一个程序主进程中创建1000个线程,启动这1000个线程。

结果:
创建1000个线程成功,启动线程,活动的线程只有254个。想了一下,大概是加上主进程的线程,一个进程活动的最大线程数为255。
请教,如何修改一个进程中活动线程的最大数呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

々眼睛长脚气 2022-10-09 05:13:51

对呀,我也正想问这个问题的。
我是用Linux9的Apache httpd进程,结果运行一段时候后,当线程到达255个时候,Apache httpd就不好使了,需要认为的重启动httpd进程。正苦恼如何修改这个最大数目。而且有疑问,为什么Apache这么土,很快就能到255呢?难道他不会自己释放一些资源吗?

失去的东西太少 2022-10-09 05:13:51

楼上的,不是Apache土,如果同时有255个用户连接到你的服务器,它怎么可能杀死线程,释放资源?
我想应该linux下应该有命令,可以修改单个线程中活动线程的最大数目,但不知道具体命令是什么

我试了下面的命令,结果不行。
ulimit -n 10000 //修改可以打开的文件数
ulimit -u 10000 //修改可以运行的进程数

修改了之后,创建线程速度变的很慢了,郁闷

梅倚清风 2022-10-09 05:13:51

我不知道如何修改最大线程数,但是我决得除非测试,正常情况下似乎没有任何理由需要创建1000个线程吧。编程中有一种并发模式叫做线程池,就是用来避免创建过多线程的。

花开半夏魅人心 2022-10-09 05:13:51

呵呵,我正是想做一个测试程序,模拟1000个--10000个用户登录服务器的情况,结果最多只能同时254个用户登录,达不到预期效果。

妖妓 2022-10-09 05:13:51

楼主看看 sysctl kernel.threads-max=? 吧。

我的是2048。

淡淡绿茶香 2022-10-09 05:13:51

楼上的兄弟,
我通过下面命令,将threads-max直接改为2048,但还是不行,一个进程可以创建3000个线程(不知道2048到底在什么地方生效的),却依然只有255个线程可以活动
#echo 2048 >; /proc/sys/kernel/threads-max

逐鹿 2022-10-09 05:13:51

活动线程?

不是同时只能有一个 process 是 run的么?怎么会有 255 这么多呀!你的机器好多CPU呀!

太阳哥哥 2022-10-09 05:13:51

下面是测试程序部分代码,CSendThread是一个封装了pthread的类,Start()是启动线程命令。

---------------------------------
#include "SendThread.h"
#include <iostream>;
#include <sstream>;
#include <vector>;
using namespace std;
const int VECSIZE = 3000;

    vector<CSendThread *>; sendVec(VECSIZE);
    for(int ix = 0; ix < sendVec.size(); ix++)
    {
        sendVec[ix] = new CSendThread();
        sendVec[ix]->;Start();
    }

         for(;
    {
        sleep(10);
    }
---------------------------------------

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文