多个短任务
Multiple short tasks
处理多项短期任务的最佳方法是什么?
我有一个案例需要处理很多 short-time/cheap Action
。数量可以从 8 到 100 不等,每个动作所需的时间在 0.00x 毫秒到 1 毫秒之间。因为它是针对 UI 的,所以工作应该以 60fps 的速度完成。但我也会 运行 Xamarin 和低端手机上的代码,因此无法始终达到该目标,这就是我使用 Task
的原因。
实际上我正在使用来自 here.
的自定义 TaskScheduler
现在的问题是,如何处理所有这些操作:
Task.Run
/Task.Factory.StartNew
有多贵?
将多个动作收集在 ConcurrentQueue
中并从最大开始。 4 个任务(在 4 核 CPU 上)将完成 while 循环中的所有操作,直到队列为空?
TaskScheduler 管理的多个任务是否比单个(或几个)任务中的多个操作更昂贵?
我想利用现有的 async/await TPL 结构,但它对许多 small/short/cheap 行动也有好处吗?
最好的方法是使用 Parallel.Invoke()。这比创建任务的开销更低。它还会自动确定同时运行有多少个动作,具体取决于当前的硬件。
有关详细信息,请参阅 documentation。
我已经在数千个任务中尝试过,Parallel.Invoke 速度更快。
处理多项短期任务的最佳方法是什么?
我有一个案例需要处理很多 short-time/cheap Action
。数量可以从 8 到 100 不等,每个动作所需的时间在 0.00x 毫秒到 1 毫秒之间。因为它是针对 UI 的,所以工作应该以 60fps 的速度完成。但我也会 运行 Xamarin 和低端手机上的代码,因此无法始终达到该目标,这就是我使用 Task
的原因。
实际上我正在使用来自 here.
现在的问题是,如何处理所有这些操作:
Task.Run
/Task.Factory.StartNew
有多贵?
将多个动作收集在 ConcurrentQueue
中并从最大开始。 4 个任务(在 4 核 CPU 上)将完成 while 循环中的所有操作,直到队列为空?
TaskScheduler 管理的多个任务是否比单个(或几个)任务中的多个操作更昂贵?
我想利用现有的 async/await TPL 结构,但它对许多 small/short/cheap 行动也有好处吗?
最好的方法是使用 Parallel.Invoke()。这比创建任务的开销更低。它还会自动确定同时运行有多少个动作,具体取决于当前的硬件。
有关详细信息,请参阅 documentation。
我已经在数千个任务中尝试过,Parallel.Invoke 速度更快。