gpt4 book ai didi

linux - 为什么我可以创建比 "free memory"/"thread stack size"更多的线程?

转载 作者:太空狗 更新时间:2023-10-29 12:08:56 26 4
gpt4 key购买 nike

在 Linux 中,最大线程数定义为 max_threads = mempages/(8 * THREAD_SIZE/PAGE_SIZE);,并且可以通过调用 cat/proc/sys/kernel/检索最大线程。这为我的树莓派 3 返回了大约 14,000。但是,当我只是在循环中使用 pthread_create() 创建线程时,(它们是空的),在我得到 之前我只能创建 250 ENOMEM(无法分配内存)

现在我查看分配给进程或线程的默认堆栈,即 8192k。所以在大约 250 个线程时,我将使用 2GB 内存。然而,在我看来,这也没有加起来,因为调用 free -m 显示我总共获得了 1GB 内存。

因为我有 1GB 的内存,我预计最多只能创建 125 个线程,而不是 250 个,也不是 14000 个。

为什么我可以创建 250 个线程?

最佳答案

默认情况下,Linux 会执行内存过量使用。这意味着您可以分配比物理内存更多的匿名、可写内存。

您可以使用以下方法关闭内存过量使用:

# sysctl vm.overcommit_memory=2

这将导致某些工作负载失败,而这些工作负载在 vm.overcommit_memory=0 模式下工作得很好。一些细节可以在 overcommit accounting documentation 中找到。 .

关于linux - 为什么我可以创建比 "free memory"/"thread stack size"更多的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com