作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一些生成相当多线程的代码(目前大约有 512 个,但将来可能会更高)。每个线程只执行少量操作,因此我希望线程对系统造成的开销保持在最低限度。
我正在使用 pthread_attr_setstacksize()
设置堆栈大小,并且我可以从 PTHREAD_STACK_MIN
获取允许的最小堆栈大小。但我的问题是:使用 PTHREAD_STACK_MIN
作为线程堆栈大小是否安全?我如何计算我需要多少堆栈?是否有任何隐藏的开销需要添加到我的计算中?
此外,是否有任何其他技术可以用来减轻线程对系统的负担?
最佳答案
您不应该在接近那么多线程的任何地方创建,您绝对不应该创建一个新线程来执行少量操作。当且仅当您现有的线程已完全饱和并且有更多可用的物理或逻辑关注点可以工作时,您才应该创建一个新线程。这对一个合理的当前应用程序施加了大约 10 个线程左右的硬限制,即使您在六核上运行,您最多也只需要 12 个左右。这样的设计是非常有缺陷的,会占用大量的进程内存,并不能真正提高性能。
至于堆栈大小,您无法真正计算出任意线程需要多少,因为它完全取决于代码运行。但是,在 Visual Studio 中,典型的堆栈大小为几兆字节。您必须发布整个代码和线程执行的反汇编结果才能知道要使用多少堆栈大小。只需将其保持在几兆字节即可。
关于c - 安全线程堆栈大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4154543/
我是一名优秀的程序员,十分优秀!