multithreading - TPL 中的最大任务数?

标签 multithreading azure task-parallel-library plinq worker-process

我想在 Windows Azure 上的工作进程中使用 TPL。我希望在队列中添加一个 IJob,它有一个 Run 方法,因此工作线程将包括:

循环 将项目从队列中取出 使用TPL调用IJob.Run,​​这是一个异步调用

但我有点担心我可以添加到 TPL 的最大项目数?如果需要的话,我很乐意构建自己的某种 TPL 池,只需检查它的功能。

干杯, Ember 。

最佳答案

TPL 的主要目标之一是消除对此的担忧。通过将您的工作分解为任务而不是线程,您可以让调度程序更适本地处理此任务的平衡。

您可以安排的“任务”数量没有固定的上限。它们(默认情况下,使用默认的 TaskScheduler)使用 ThreadPool 进行调度,从 .NET 4 开始,ThreadPool 根据工作进行扩展。我强烈建议不要尝试建立自己的池 - 你不太可能比默认的池做得更好。话虽这么说,如果您的任务有非常不标准的行为,您可能需要考虑编写自定义 TaskScheduler。

此外 - 认识到理想情况下,您应该让您的任务“尽可能大”。与单个任务相关的开销 - 与适当数量的较大“任务”相比,它们太小(就工作而言)将导致开销对性能产生更大的影响。

关于multithreading - TPL 中的最大任务数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740495/

相关文章:

c# - 使用azure向IOS和android发送广播通知

c# - 条件变量的 TPL 等价物是什么?

javascript - 在 yaml 中的 gulp 任务中设置 --max_old_space_size

c# - 将 Ping 应用程序转换为多线程版本以提高速度 - C#

ruby-on-rails - Rails Controller 是多线程的吗? Thread.exclusive 在 Controller 中

java - 在事件调度线程中显示 JWindow

azure - 无法使用 Azure DevOps 发布管道将 APK 发布到 Visual Studio App Center

c# - 如何在对目标的引用较弱的情况下将 Action 传递给任务工厂

c# - 来自 C# 任务的通用回调

python - Flask 线程共享值