我正在研究POSIX线程,发现有一种方法可以更改堆栈大小;我仍然是一般操作系统的外行。那么,拥有小的堆栈有什么好处,我在运行时会节省内存吗?输入嵌入式系统?
拥有少量堆栈有什么好处
主要好处是您可以创建更多线程。
在32位OS(4GiB地址空间)上,使用8MiB堆栈最多可以创建512个线程。实际上,您将更快地用完虚拟地址,因为内核通常会保留总地址空间的1/2到1/4,而堆库和共享库会更多地分割可用地址空间。
如果正在运行服务器进程(例如Web搜索),则可能需要使用“每个连接一个线程”模型,该模型随后限制了您在一台计算机上可以同时处理多少个同时连接。甚至在10年前,与处理器的功能相比,500个线程还是太少了。
对于64位OS,地址空间用尽不多。
此外,一旦线程使用了大量堆栈,该内存将被“搁浅”。
假设您有一台Web服务器,每秒处理1000个请求。如果大多数请求使用(例如)32KiB的堆栈,但是偶尔出现的罕见请求使用4MiB的堆栈,并且如果请求在线程池中随机分布,则最终每个线程将使用2MiB的RAM,因此您的过程将继续使用N * 2MiB的RAM,尽管99.99%的时间只需要N * 32KiB。
如果强制线程使用不超过(例如)64KiB的堆栈,则可以避免此类RAM搁浅。
具有此额外的RAM,您可以在同一台计算机上运行其他任务(这是多少云服务提供商能够以非常低的成本出售其“超额容量”)。