精华内容
下载资源
问答
  • 既然如此,我们可以想象,一个系统中的进程数量肯定是上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是上限的。 Linux中最多可以有多少进程? 一.Linux中有一个命令可以帮助...

    目录

    说明

    Linux中最多可以有多少个进程?

    软限制

    pid_t类型限制

    一个进程中最多可以有多少个线程?

    文件描述符数限制

    内存限制(线程堆栈内存*n)


    说明

    进程:系统分配资源的载体,是程序运行的实例;

    线程:程序执行的最小单元,是进程中的一个实体用来执行程序,一个进程中有多个线程。

    既然如此,我们可以想象,一个系统中的进程数量肯定是有上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是有上限的。

    Linux中最多可以有多少个进程?

    软限制

    一.Linux中有一个命令可以帮助我们查看系统中的进程上限

    [pigff@izbp13yd4r85qvk53t04mbz ~]$ ulimit -u
    4096


    这属于软限制,是可以改变的。也就是说在我的机器上最多可以有4096个进程,但是我可以通过改变这个参数的值来修改对于进程数量的软限制,比如说用下面的命令将软限制改到5120。


     ulimit -u 5120

    pid_t类型限制


     二.我们用pid_t来表示一个进程的pid,因此能表示的进程的范围一定不会超过pid_t类型的大小


    [pigff@izbp13yd4r85qvk53t04mbz ~]$ cat /proc/sys/kernel/pid_max
    32768


    pid_t实际上就是一个short类型变量,当然这里能表示的范围只是进程id最多表示到这么多,这只是一个理论值,实际上,由于内存等系统资源的限制,根本不会同时有这么多的进程存在。

    一个进程中最多可以有多少个线程?

    文件描述符数限制

    一、ulimit -n可以查看一个进程最多可以打开多少文件描述符数;

    内存限制(线程堆栈内存*n)

    Linux中线程占用内存中,取决于分配给线程的调用栈大小,可以用ulimit -s命令来查看大小(stack size (kbytes,-s)表示线程堆栈大小,一般常见的有10M或者是8M)。

    我们还知道,一个进程的虚拟内存是4G,在Linux32位平台下,内核分走了1G,留给用户用的只有3G,于是我们可以想到,创建一个线程占有了10M内存,总共有3G内存可以使用。于是可想而知,3G/10M=最大线程数,最多可以创建差不多300个左右的线程。 但实际会比这个数小一点,因为程序本身占内存,还有些管理线程。64位系统的不一样,64系统的线程数并不是简单是用 内存/线程栈 ,

    因此,进程最多可以创建的线程数是根据分配给调用栈的大小,以及操作系统(32位和64位不同)共同决定的。
     

      可以使用ulimit -s来设置stack size,设置的小一点开辟的线程就多。
        同时,

      /usr/include/bits/local_lim.h中的PTHREAD_THREADS_MAX限制了进程的最大线程数
      /proc/sys/kernel/threads-max中限制了系统的最大线程数

       查看公司的服务器:

       限制数为:  2^19
       实际测试结果:2^16

    三、最靠谱的方法还是自己写程序测试的结果

    #include<unistd.h>
    #include<stdlib.h>
    #include<pthread.h>
    #include<stdio.h>
     
    void* foo(void* param)
    {
    }
     
    int main()
    {
            int i = 0;
            pthread_t thread;
            while (1) {
                    if (pthread_create(&thread, NULL, foo, NULL) != 0)
                            break;
                    i ++;
            }
            printf("i = %d\n", i);
    }

    编译命令如下:

    g++ main.cpp -o main -lpthread

     执行结果:

    [root@localhost]# ./main

    i = 32747

    原文:

    Linux中最多有多少进程?一个进程最多有多少线程?_pigff的博客-CSDN博客

    Linux下一个进程可以开多少线程 - 步孤天 - 博客园

    展开全文
  • 一个进程可以创建多少线程

    千次阅读 2018-07-18 23:10:23
    理论上,一个进程可用虚拟空间是2G,默认情况下,线程的栈的大小是1MB,所以理论上最多只能创建2048个线程。如果要创建多于2048的话,必须修改编译器的设置。 #include&lt;windows.h&gt; #include&lt;...

    https://www.cnblogs.com/Leo_wl/p/5969621.html

    理论上,一个进程可用虚拟空间是2G,默认情况下,线程的栈的大小是1MB,所以理论上最多只能创建2048个线程。如果要创建多于2048的话,必须修改编译器的设置。

    #include<windows.h>
    #include<process.h>
    #include<stdio.h>
    HANDLE hProcess;
    HANDLE hThread;
    
    DWORD WINAPI athread(void)    //线程函数
    {
    	WaitForSingleObject(hProcess, INFINITE);
    	return 0;
    }
    bool createThread(int threadNum)    //参数表示创建的线程数
    {
    	int i;
    	hProcess = GetCurrentProcess();
    	for(i = 0; i < threadNum; i++)
    	{
    		hThread = NULL;
    		hThread = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall *)(void *))athread, NULL, NULL, NULL);
    		if(hThread != NULL)
    		{
    			printf("\nThe Number of Thread : %d ", i + 1);
    		}
    		else{
    			printf("\nError : Create Thread Fail.\n");
    			return false;
    		}
    	}
    	return true;
    }
    int main()
    {
    	printf("Test : How much thread a process can create.\n");
    	createThread(4500);
    	getchar();
    	return 0;
    }

    结论:

    一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定,只要虚拟空间足够,那么新线程的建立就会成功。如果需要创建超过2K以上的线程,减小你线程栈的大小就可以实现了。

    展开全文
  • 既然如此,我们可以想象,一个系统中的进程数量肯定是上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是上限的。那进程线程的上限到底是多大呢? Linux中最多可以有多少进程? 一....

    我们都知道进程的概念,它是CPU分配资源的载体,是程序运行的实例;也知道线程的概念,它是程序执行的最小单元,是进程中的一个实体用来执行程序,一个进程中有多个线程。

    既然如此,我们可以想象,一个系统中的进程数量肯定是有上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是有上限的。那进程和线程的上限到底是多大呢?

    Linux中最多可以有多少个进程?

    一.Linux中有一个命令可以帮助我们查看系统中的进程上限

    [pigff@izbp13yd4r85qvk53t04mbz ~]$ ulimit -u
    4096

    这属于软限制,是可以改变的。也就是说在我的机器上最多可以有4096个进程,但是我可以通过改变这个参数的值来修改对于进程数量的软限制,比如说用下面的命令将软限制改到5120。

     ulimit -u 5120

     二.我们用pid_t来表示一个进程的pid,因此能表示的进程的范围一定不会超过pid_t类型的大小

    [pigff@izbp13yd4r85qvk53t04mbz ~]$ cat /proc/sys/kernel/pid_max
    32768

    pid_t实际上就是一个short类型变量,当然这里能表示的范围只是进程id最多表示到这么多,这只是一个理论值,实际上,由于内存等系统资源的限制,根本不会同时有这么多的进程存在。

    一个进程中最多可以有多少个线程?

    在上一篇文章Linux中线程占用内存中,我们知道了创建一个线程会占用多少内存,这取决于分配给线程的调用栈大小,可以用ulimit -s命令来查看大小(一般常见的有10M或者是8M)。我们还知道,一个进程的虚拟内存是4G,在Linux32位平台下,内核分走了1G,留给用户用的只有3G,于是我们可以想到,创建一个线程占有了10M内存,总共有3G内存可以使用。于是可想而知,最多可以创建差不多300个左右的线程。

    因此,进程最多可以创建的线程数是根据分配给调用栈的大小,以及操作系统(32位和64位不同)共同决定的

    展开全文
  • 默认情况下linux环境下一个进程最多能有多少线程?: 主线程+自己的线程382 = 383 这我自己已经验证过,测试程序在后面。

    默认情况下linux环境下一个进程最多能有多少个线程?:

    主线程+自己的线程382 = 383

    这我自己已经验证过,测试程序在后面。

     

    据说可以设置线程数目:

    据说是可以设置的,但本人还没有验证!不知道可否。

    下面是测试程序,可以验证,在默认情况下一个进程同时最多可以存在的线程数目。

    #include <stdio.h>
    #include <pthread.h>

    void* foo(void* x)
    {

    }

    int main()
     {
             int i = 0;
             pthread_t thread;

             while (1) {
                 if (pthread_create(&thread, NULL, foo, NULL) != 0)
                     return 1;
                 i ++;
                 printf("i = %d\n", i);
              }

            return 0;
     }

     

    展开全文
  • 被问懵了:一个进程最多可以创建多少线程

    千次阅读 多人点赞 2021-07-15 09:19:09
    大致意思就是,他看了一个面经,说虚拟内存是 2G 大小,然后他看了我的图解系统 PDF 里说虚拟内存是 4G,然后他就懵逼了。 其实他看这个面经很问题,没有说明是什么操作系统,以及是多少位操作系统。 因为不同的...
  • Linux下一个进程究竟会有多少线程

    千次阅读 2017-10-10 14:53:46
    进程可以启动最大线程个
  • 一个进程能运行多少线程

    千次阅读 2019-04-11 15:22:41
    也知道线程的概念,它是程序执行的最小单元,是进程中的一个实体用来执行程序,一个进程多个线程。(一个cpu内核只能运行一个进程/线程,一台8核cpu的服务器只能同时运行8个进程/线程。只是每个进...
  • 一个进程最多创建多少线程

    千次阅读 2018-10-10 23:02:38
    最近,在做一个关于聊天服务器的项目,其中遇到了一个问题,那就是一个进程可以产生多少线程呢? 开始各种想象,会和不同平台,不同系统相关,网上很多大佬说是1024个,也256个。 与其无端猜测,不如动手测试...
  • 查询一个进程有多少线程

    千次阅读 2018-06-04 19:33:54
    个人觉得最简单就是pstack。或者通过 cat /proc/pid/status .还有一个是ps hH p pid | wc -l
  • 进程(process)和线程(thread)是操作系统的基本概念,但是...vs 线程 :一个进程可以包含多个线程" title="进程 vs 线程 :一个进程可以包含多个线程" style="border:0px; max-width:602px; height:auto; ma
  • 进程线程的关系 简单复习一下:一个进程“代表中计算机中实际跑起来的一个程序,在现代操作系统...因此一个进程至少得有一个线程,我们把这个线程称之为”主线程“,也就是说,一个进程至少要有一个主线程。 ...
  • 进程线程

    万次阅读 多人点赞 2021-03-17 22:50:20
    进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个用户进程可以直接访问其他进程的地址空间 动态性 进程与程序的区别在于,程序只是...
  • 进程线程的区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    每个进程自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程线程 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程...
  • 一个进程可以创建多少线程

    千次阅读 2009-04-16 17:09:00
    以前一直没有试过也没怎么想过这问题,模糊觉得和系统性能与关系,前2天写小程序试了一下,如下#include "stdafx.h"#include "stdio.h"#include "stdlib.h"#include "windows.h"#include "process.h"unsigned ...
  • windows 下一个进程能开多少线程

    千次阅读 2015-08-12 17:39:19
    进程里面创建线程数收到总线的...当设置为512k时,可以开2244个线程,设置为256k时,可以开3122个线程,所以在我们做sock通信服务器时,需要注意,如果一个客户端 connect进来,就用一个线程对它进程处理的话,服务端
  • 一个进程最多能包含多少线程

    万次阅读 2012-10-20 16:22:34
    实验蛮简单的,但是,我不由想到了,一个进程最多能包含多少线程。 在网上查了查,貌似也没找到多少这方面的资料。大部分都是关于服务器多线程链接sever的,关于本机可执行exe的进程数倒是没有什么涉及。 我觉得...
  • 线程是程序执行的最小单元,是进程中的一个实体用来执行程序,一个进程多个线程一个系统中的进程数量肯定是上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是上限的。那进程和...
  • 默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 #...
  • 大家好,我用CreateProcess创建了一个进程进程的句柄可以获取到, 请问能否通过此句柄创建一个进程的子线程? 如果可以,如何实现? 多谢。
  • 默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 #define MAX...
  • <br />转:http://hi.baidu.com/willor/blog/item/fd58e6c5ea840ca38326ac6a.html<br />ps -ef f  用树形显示进程线程,比如说我想找到proftp现在有多少个进程/线程可以用  $ ps -ef f | grep...
  • 线程VS进程

    万次阅读 2021-03-10 16:44:19
    比如说QQ是是一个进程,如果你在和A朋友语音聊天的同时和B朋友打字聊天,同时还在QQ群下载图片,这三个操作就相当于开启了三个线程可以线程之后我们设计的程序就可以一边执行A操作,一边执行B操作了。...
  • 默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。     [cpp]...
  • 一个进程最多可以创建线程的数目

    千次阅读 2017-10-02 22:13:47
    如果使用VS,链接程序开关/SACK 或者/F可以设置线程堆栈大小,默认分配一个线程的堆栈大小是1MB,当CreateThread参数的StackSize大小与链接程序设置的不一致时,采用的方法是谁大用谁的,所以用4K
  • 进程中创建线程的限制 默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这...
  • Java中main方法启动的是一个线程也是一个进程一个java程序启动后它就是一个进程进程相当于一个空盒,它只提供资源装载的空间,具体的调度并不是由进程来完成的,而是由线程来完成的。一个java程序从main开始之后...
  • Linux查看一个进程线程详情

    千次阅读 2016-12-16 11:26:50
    Linux 查看一个进程线程的状态 方法一:PS 在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。 1.$ ps -T -p 方法二: Top 1.$ top -H 2...
  • 进程中创建线程的限制 默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这...
  • 如何查询一个进程下面的线程数(进程线程区别) https://www.cnblogs.com/kevingrace/p/5252919.html在平时工作中,经常会听到应用程序的进程线程的概念,那么它们两个之间究竟什么关系或不同呢?一、对比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 855,267
精华内容 342,106
关键字:

一个进程可以有多少个线程