4

我最近比较了 .NET 中的 OmniThreadLibrary 和 ThreadPool,我发现 Omni 在最大线程数方面受到更多限制——允许 60 个——而 .NET在 .NET 4.0 中可以达到32768 。

为什么会有这样的限制?

4

2 回答 2

8

这是一个历史性的选择,一旦被取消。该限制仅存在于线程池实现中。

网站上给出了解释,说明如下:

60 个并发线程的限制仅适用于线程池。线程池是为快速执行许多小请求而设计的,而不是作为很少活动线程的存储。

您可以跳过线程池并直接使用 OTL 任务。这样,您可以创建数百个。

这个限制的原因是内部[OtlTaskControl]TOmniTaskExecutor.WaitForEvent使用有这个限制的 MsgWaitForMultipleObjectsEx。如果真正需要具有超过 60 个并发运行线程的任务池,则可以绕过此限制。

于 2012-11-19T16:39:31.200 回答
1

您可以通过更改以下内容来绕过这些内容:

FD_SETSIZE = 1024Winsock.pas

CMaxConcurrentWorkers = 1024;OtlThreadPool.pas

于 2012-12-04T21:48:59.803 回答