我正在编写一些代码,它产生了很多线程(目前大约有512个,但未来可能会更高)。每个线程只执行少量的操作,所以我希望线程在系统上的开销保持在最低限度。安全线程堆栈大小?
我设置使用pthread_attr_setstacksize()
堆栈大小,我可以从PTHREAD_STACK_MIN
得到允许的最小堆栈大小。但我的问题是:使用PTHREAD_STACK_MIN
作为线程堆栈大小安全吗?如何计算我需要多少堆栈?是否有任何隐藏的开销需要添加到我的计算中?
此外,是否有任何其他的技术,我可以使用,以减少系统的线程的负担?
谢谢马特。我认为这与我之后的答案最接近。我希望有人会说“加上所有局部变量的sizeof(),为线程开销增加42个字节,然后为好运增加10%”,但似乎有更多因素可能正在上映。感谢关于优先级和暂停的提示。 – 2010-11-11 14:30:50
@ ltn100:不,它更像是“在指定堆栈大小的情况下彻底测试您的代码,在调试环境中检测溢出,然后为好运添加10%”。 – 2010-11-11 14:43:45
@ ltn100:如果你可以找到一个调试工具来实际测量你的平台上的高水位堆栈使用情况,那很好,但是你实际需要这样做的平台(因为堆栈是物理RAM)最好的调试工具。而且你必须通过测试真正彻底。任何小事情,包括你动态链接的库的变化,或者他们看到的环境变量,或者(从字面上)一周中的某一天,都可能增加你的高水位标记。避免使用VLA,避免依赖于输入数据的任何递归。 – 2010-11-11 14:58:21