4

最近、.NETにあるOmniThreadLibraryとThreadPoolを比較しましたが、Omniは最大スレッド数がはるかに制限されており(60が許可されています)、.NETは.NET4.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 に答える