为什么PLinq不支持超过63个并行线程?

发布于 2024-11-07 09:50:55 字数 203 浏览 2 评论 0原文

我认为这个问题很清楚。 PLinq 不允许创建超过 63 个线程(WithDegreeOfParallelism 不允许,会抛出 ArgumentOutOfRangeException)。在极少数情况下,我们需要从线程池中获取超过 63 个线程(例如 I/O 操作,其中任务需要比平常更多的时间才能完成)。据我所知,Parallel 类也有同样的限制。有什么解决方法吗?这个限制的原因是什么?

I think the question is clear. PLinq doesn't allow you to create more than 63 threads (WithDegreeOfParallelism doesn't allow it, throws ArgumentOutOfRangeException). In rare situations, we need to acquire more than 63 thread from thread pool (such as I/O operations, where a task needs more time to complete than usual). As far as I know, the Parallel class also has the same limitation. Is there any workaround? what's the reason for this limitation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦断已成空 2024-11-14 09:50:55

引用自此链接:

使用 Parallel.For/ForEach,就没有
隐式限制,但是 ThreadPool
在 .NET 4 中(Parallel.For/ForEach
默认目标)将仅使用最多
64 个逻辑处理器。 .NET 中的 PLINQ
4 的硬编码限制为 63
分区。随着越来越大
我希望机器可用
你会看到这样的限制被删除,
就像最新版本一样
Windows 操作系统最多支持 256 个
逻辑处理器。

Quoted from this link:

With Parallel.For/ForEach, there's no
implicit limit, however the ThreadPool
in .NET 4 (which Parallel.For/ForEach
target by default) will only use up to
64 logical processors. PLINQ in .NET
4 does have hard-coded limit of 63
partitions. As larger and larger
machines become available, I expect
you'll see such limitations removed,
just as how with the latest versions
of Windows the OS supports up to 256
logical processors.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文