问题
I was recently comparing OmniThreadLibrary and ThreadPool that is in .NET and I found that Omni is much more restricted in maximum threads — 60 allowed — while .NET can go up to 32768 in .NET 4.0.
Why such a limit?
回答1:
It's an historic choice that once may be lifted. The limit is only there on the threadpool implementation.
An explanation is given on the website, stating the following:
The limitation of 60 concurrent threads only applies to the thread pool. Thread pool is designed for fast execution of many small requests, not as a storage for rarely-active threads.
You can just skip thread pool and use OTL tasks directly. That way you can create many hundreds of them.
The reason for this limit is that deep inside [OtlTaskControl]TOmniTaskExecutor.WaitForEvent
uses MsgWaitForMultipleObjectsEx which has this limitation. If a real need occurs for task pools with more than 60 concurrently running threads, this limitation could be circumvented.
回答2:
You can bypass this stuff by changing the following:
FD_SETSIZE = 1024
in Winsock.pas
CMaxConcurrentWorkers = 1024;
in OtlThreadPool.pas
来源:https://stackoverflow.com/questions/13458029/why-is-omnithreadlibrary-limited-to-60-threads-when-nets-limit-is-32768