每个任务分配更多线程
如何从 TPL 为每个任务分配更多线程?我想调查一下,如果我将其设置为更大的值,我可以获得更好的性能。
现在我看到我的应用程序最多使用 14 个线程,并且 cpu 使用率最多为 13%(核心 i7)。
其次,如何检查当前为任务指定了多少个线程?
How can I allocate more threads per task from TPL? I want to investigate if I set this to bigger value I can get a better performance.
Now I see my app is using max 14 threads and cpu is max 13% in use (core i7).
And second how can I check how many threads is currenty specified for a task?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有一个名为
TaskScheduler
的内置扩展点。默认任务计划程序使用 .NET 线程池线程和多种启发式方法来确定用于处理排队任务的最佳线程数。 有关默认实现的更多信息可在 MSDN 上找到(请参阅标题为“ 默认任务计划程序)。如果您创建自己的
TaskScheduler
实现,您可以准确控制要分配的线程数量、分配时间、分配的核心等。MSDN 上有一个关于如何执行此操作的示例,但您会发现更完整、更多样化并行扩展 Xtra 中的示例实现。话虽如此,如果您能够击败默认实现,我会感到惊讶。如果您正在执行任何 I/O,请确保您充分利用带有
Task.FromAsync
的异步 I/O APM API。There is a built in extension point called the
TaskScheduler
. The default task scheduler uses .NET thread pool threads and several heuristics to determine the optimal number of threads to use to process the tasks that are queued up to it. More info on the default implementation is available here on MSDN (see section titled The Default Task Scheduler).If you create your own
TaskScheduler
implementation you can control exactly how many threads you want to allocate, when they're allocated, on what cores, etc. There's a sample here on MSDN on how to do this, but you'll find more complete and varied sample implementations in the Parallel Extensions Xtras.All that said, I'd be surprised if you can beat the default implementation. If you're doing any I/O, make sure you're taking full advatange of async I/O APM APIs with
Task.FromAsync
.根据您使用 TPL 的方式,您可以使用 TaskCreationOptions.LongRunning 创建任务,或者如果您使用的是 Parallel.For 之类的内容,则可以在 ParallelismOptions 中指定 MaxDegreeOfParallelism。
查看此问题 更多链接
Depending on how you are using TPL, you could create the tasks with TaskCreationOptions.LongRunning, or possible specify MaxDegreeOfParallelism in ParallelismOptions if you are using something like Parallel.For.
See this question for more links