一个电脑最多几个线程

可惜,说到话题和记忆,我们还得从十几年前开始说起。
那时我还在做软件开发人员。
我记得有一次,我们的团队正在开发一个使用多线程的项目,并注意到一个进程可以打开的线程数量受到内存的限制。
当时,我们使用的是 3 2 位机器。
默认情况下,一个进程有2 G的可用内存。
这个数字听起来很大,但实际上它是分配给每个线程的。

当时每个线程默认的堆栈容量是1 M。
这个1 M必须和2 G分开,所以理论上最多可以开2 000多个流。
但说实话,这只是一个理论值。
在实际操作中,由于CPU、磁盘速度和物理内存的限制,这个数字是完全达不到的。

记得有一次我们测试的时候,线程数还没到2 000,机器就慢得像蜗牛一样。
然后我们尝试了两种方法,一是创建线程时减小线程堆栈大小,二是升级到6 4 位系统。
对于 6 4 位系统,内存限制理论上不再是问题。

但是,即便如此,机器的速度仍然会受到CPU、磁盘速度、物理内存的拖累。
当时我不明白为什么同样2 G内存的3 2 位和6 4 位系统的流处理能力会有这么大的差异。
但现在想来,可能和地址空间有关。

总之,线程和内存问题一定要根据实际情况进行调整。
当用户多时,电脑自然会变慢。
此时就必须考虑优化内存使用或者升级硬件。

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

对于 3 2 位系统,最大进程内存为 3 GB。

默认的线程栈是1 m。

3 G/1 M=3 000 线程。

6 4 位内存很大,理论上2 04 8
操作系统和硬件也有限。

称一下体重。

一台 Java 服务器可以跑多少个线程?

你好,你说的情况很复杂。
我将尝试用简单的语言向您解释这一点。

首先,Java服务器能够执行的线程数量取决于两个方面:一方面是JVM(Java虚拟机)可以给自身分配多少内存,另一方面是操作系统允许其拥有多少个线程。

1 . JVM内存配置
想象一下,你的计算机的内存就像一个巨大的储物柜。
JVM 内存堆是东西进入储物柜的地方。
线堆的大小与每个抽屉中可以放置的物品的大小相似。


Locker(内存堆)越大,Locker(线程栈)能存储的东西就越少,能容纳的盒子(线程)就越少。

盒子(线程堆栈)越小,可以放置的盒子(线程)就越多。

2 操作系统限制
操作系统还为您设置了上限。
例如,仓库一次只能存放一定数量的物品,并且不能无限量地放入其中。


操作系统会限制你创建的线程数量,就像仓库限制物品数量一样。

某些系统参数(例如 pid_max 和 thread-max)决定可以创建的线程数量。

风险
如果线程过多,您可能会遇到一些问题,例如性能缓慢或服务器内存不足,并且可能会出现 OutOfMemoryError。

优化建议

相应调整内存堆、线程栈大小等JVM参数。

使用线程池,这样您就不必在每次使用线程时创建和销毁线程。

监视并调整系统设置以确保线程数在合理的限制内。

所以,一般来说,Java服务器的最大线程数并不是固定的,应该根据你的需求和服务器的能力进行调整。
它需要监控,需要调整,需要在性能和稳定性之间取得平衡。

一个进程最多可以创建多少个线程?

3 2 位系统,8 MB 堆栈,最多 3 8 0 个线程。
将堆栈更改为5 1 2 KB,最大线程数为6 000。
6 4 位系统,8 MB堆栈,理论上1 6 00万个线程。
实际上,如果你看一下系统参数,thread-max是关键。
主线程最大 1 4 5 5 3 ,pid_max 3 2 7 6 8 max_map_count 为 6 5 5 3 0;如果太小,线程创建将会失败。
检查:cat /proc/sys/kernel/threads-max。
调整:echo 1 00000 > /proc/sys/kernel/threads-max。
用户限制:ulimit -u。
使用线程池实现高并发并谨慎创建它们。
你自己掂量一下。