线程和进程的关系

一个进程可以有多个线程,至少一个。
该序列必须位于进程的地址空间中。
资源被分配给进程并在线程之间共享。
CPU 分配给线程。
线程之间的协作和同步,以及进程之间的消息通信。
进程是资源所有者和调度单位。
创建进程时,创建一个线程并将其放入缓冲池中。
服务器接收请求并生成一个线程来处理它。
任务完成后,线程返回到缓冲池。
当没有线程时,服务器会等待。

一个电脑最多能开启多少个线程

说实话,3 2 位机器很烦人。
他在做项目时第一次遇到了这个问题。
默认处理器有2 G内存,对吗?那么每个线程还共享1 M堆空间,必须访问。
2 000多个线程听起来可能很多,但实际使用时却压垮了CPU。
我尝试过,但机器只能持续几百个线程。

你要付款吗?减少堆栈的大小是一个技巧。
我记得更改过一次代码,将堆栈从默认的1 M更改为5 00K。
哦,处理器可以同时运行的线程数量增加了一倍。
但要看它能否携带你的代码。
有时,当堆栈很窄时,一旦函数完全嵌套,函数就会被删除。

同样使用6 4 位系统。
这绝对是一个很难回答的问题。
6 4 位内存简直是压倒性的。
只要打开进程,给自己几GB的内存,线程堆栈就会大很多,所以你根本不用担心。
现在谁还在新机器上使用 3 2 位?但是,您不需要能够做到。

但是当他说,无论你有多少内存,CPU都无法运行,一切都是失败。
我遇到了服务器只有一个 CPU 的情况。
无论有多少线程,磁盘 I/O 都无法跟上并且仍然很慢。
所以不要只关注记忆。
CPU、磁盘,这三者必须成对出现,系统才能高速运行。
如果真的把引擎推到极限,别说是2 000个线程,就是2 00个线程也能像牛车一样艰难。

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

说实话,这个问题比较复杂,需要单独讨论。

我们先来说说3 2 位。
那东西的内存只有3 G,用户占用了1 G,剩下2 G。
每个线程的默认堆栈为 8 MB。
只要把2 G除以8 MB就可以得到大约3 8 0。
没错,就是这样。
但是,如果将堆栈大小更改为 5 1 2 KB,则该数字会立即增加。
2 G除以5 1 2 KB就是近6 000。
就是这样。

6 4 位则完全不同。
这是一个很大的存储空间,1 2 8 TB。
按8 MB计算,有1 6 00万以上。
这个数字听起来很吓人,但实际上并没有什么用处。
为什么?该系统有其自身的局限性。

例如Linux系统有一个参数/proc/sys/kernel/threads-max,它控制全局最大线程数。
默认值通常是1 4 5 5 3 如果超过这个数字,您将无法创建它。
还有/proc/sys/kernel/pid_max,就是PID的上限。
默认值是3 2 7 6 8 如果超过这个数字,新的进程和线程将无法运行。
还有/proc/sys/vm/max_map_count,它控制进程的虚拟内存区域的数量。
默认值为6 5 5 3 0。
如果太小,线程创建会失败。

所以,在6 4 位系统中,线程的数量并不取决于内存,而是取决于这些参数。
默认值为 1 4 5 5 3 到 3 2 7 6 8 ,具体取决于设置方式。

您对当前的限制有何看法?只需使用命令行即​​可。
例如cat /proc/sys/kernel/threads-max,取决于系统的最大线程数。
cat /proc/sys/kernel/pid_max,这是基于PID上限的。
ulimit -u,这个是查看当前用户进程数的上限。

你想改变吗?有root权限。
例如:echo 1 00000 > /proc/sys/kernel/threads-max,这是系统中的最大线程数。
ulimit -u 6 5 5 3 5 ,这是用户进程数的上限。

最后,说实话。
如果你真的想使用那么多线程,你必须对其进行优化。
在高并发情况下,使用线程池、协程或异步IO模型比直接创建线程更容易。
更少的创造力,更好的表现。

进程和线程的区别

说实话,进程和线程应该仔细检查。
像xx.exe这样的进程是在Windows系统中运行的应用程序。
进程有自己的内存空间。

一个进程可以运行多个线程。
线程有什么作用?它负责执行控制室等流程中的任务。
一个进程必须至少有一个线程,但在实际使用中,一个进程运行多个线程是很常见的。
这就是进程和线程最大的区别点了。
进程是操作系统分配内存、CPU时间等资源的基本单位,所有这些资源都分为进程。
线程是处理器编程的基本单位。
两者的成本相差很大。

每个进程都有自己独立的代码和数据空间。
两个进程之间切换时,过剩量比较大。
但线程非常简单。
同一进程中的线程共享代码和数据空间,每个线程都有自己的运行堆栈和程序计数器。
因此,改变线程时,系统的负载很小。

内存方面也很清晰。
一个进程的多个线程共享该进程的地址空间和资源。
但不同进程之间的地址空间和资源是独立的。
而且影响是巨大的。
如果进程崩溃,就像在Windows XP时代一样,如果一个进程死掉,其他进程可以继续运行。
但如果一个线程挂起,整个进程就会被破坏。
这就是多进程系统比多线程系统更健壮的原因。
表现过程也不同。
每个进程可以独立运行,有自己的程序入口、执行顺序和出口。
但线程不好,它们必须运行在进程中,并控制进程如何执行。
但它们可以同时运行。