线程的最大数量

3

在Delphi开发的32位和64位应用程序中,线程的最大数量是多少?

我需要知道32位应用程序同时运行的线程限制,因为我正在进行性能分析,并且希望让操作系统管理等待执行顺序的线程。


请注意,一般来说,如果您创建的线程数超过处理器核心(或虚拟等效物)的数量,您将不会获得任何性能优势。如果您创建太多线程,甚至会导致像这样的非常糟糕的结果:http://thedailywtf.com/Articles/Less-is-More.aspx 那么您确定您需要理论上可能的最大线程数吗? - Hauke P.
1
操作系统总是管理线程执行...这是它的工作。http://blogs.msdn.com/b/oldnewthing/archive/2007/03/01/1775759.aspx - J...
话说,在32位机器上,你可能支持4294967295个线程,在64位机器上,你可能支持18446744073709551615个线程,直到你无法再跟踪它们为止。 - Chris
3
@Chris - 我认为那是绝对的胡说八道。考虑到每个线程都需要自己的堆栈空间,而默认情况下每个线程需要1MB的空间,在32位系统中,大约使用2000个线程就会用完用户空间。你可以将堆栈空间调整到较小的值,但你永远不可能拥有四十亿个线程。 - J...
4
这句话的意思是:这是一句关于MAX_INT(最大整数)开玩笑的话......虽然是个不太好笑的玩笑。我的观点是,理论上可以运行的线程数量实际适用于您的应用程序的数量是完全不同的问题。 - Chris
显示剩余3条评论
1个回答

0

你可能想要阅读这个答案:https://dev59.com/RXRB5IYBdhLWcg3w4bAo#481919

不过,我在上面的评论中写的部分是正确的(但请注意Martin James在下面的反对意见)。

请注意,一般来说,如果你创建的线程数远远超过处理器核心(或虚拟等效物)的数量,你将不会获得任何性能优势。如果你创建太多线程,你甚至会得到像这样糟糕的结果: thedailywtf.com/Articles/Less-is-More.aspx 所以你完全确定你需要理论上可能的最大线程数吗?


2
是的,但那个评论太愚蠢了。我写这篇文章的电脑有4/8个核心和1260个线程,运行得很好。抱歉,但你评论中的说法最多只能算是极具误导性。如果线程进行阻塞调用,例如网络相关的DNS查询等,使用比核心更多的线程将会大幅提升性能。我不给你的评论点踩的唯一原因是你会成为所有thread-FUD传播者中被单独挑出来的一个。话虽如此,我同意任何需要数千个线程的设计都应该“仔细审查”。 - Martin James
啊,这里已经很晚了。你说得完全正确。 - Hauke P.
这段话作为评论很好,但它并没有回答问题。最终只是在询问确认:“你确定吗?”回答应该包含对问题的实际回答。我不会点踩,但其他人可能不会那么友善。 :-) - Ken White
我在另一个类似的问题中链接了另一个没有回答的答案,它得到了相当多的赞同,并最终被接受为答案。那么,我的评论中的额外信息真的那么糟糕吗? - Hauke P.
StackOverflow有关闭重复问题的选项,这个已经完成了。 - Jerry Dodge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接