我最近比较了 .NET 中的 OmniThreadLibrary 和 ThreadPool,我发现 Omni 在最大线程数方面受到更多限制——允许 60 个——而 .NET在 .NET 4.0 中可以达到32768 。
为什么会有这样的限制?
我最近比较了 .NET 中的 OmniThreadLibrary 和 ThreadPool,我发现 Omni 在最大线程数方面受到更多限制——允许 60 个——而 .NET在 .NET 4.0 中可以达到32768 。
为什么会有这样的限制?
这是一个历史性的选择,一旦被取消。该限制仅存在于线程池实现中。
网站上给出了解释,说明如下:
60 个并发线程的限制仅适用于线程池。线程池是为快速执行许多小请求而设计的,而不是作为很少活动线程的存储。
您可以跳过线程池并直接使用 OTL 任务。这样,您可以创建数百个。
这个限制的原因是内部[OtlTaskControl]TOmniTaskExecutor.WaitForEvent
使用有这个限制的 MsgWaitForMultipleObjectsEx。如果真正需要具有超过 60 个并发运行线程的任务池,则可以绕过此限制。
您可以通过更改以下内容来绕过这些内容:
FD_SETSIZE = 1024
在 Winsock.pas
CMaxConcurrentWorkers = 1024;
在OtlThreadPool.pas