什么是最佳运行任务数?

时间:2016-04-25 15:08:20

标签: c# multithreading azure

我有以下算法将数据写入Azure blob存储

private const long MaxChunkSize = 1024 * 1024 * 4; // 4MB

private void UploadPagedDataToBlob(...)
{
    ...
    List<Task> list_of_tasks = new List<Task>(); 
    do
    {
         var stream = new MemoryStream(data, index, (int)blockSize);
         var task = _blob.WritePagesAsync(stream, startPosition, null);

         list_of_tasks.Add(task);
         ...
     }
     while (remainingDataLength > 0);
     Task.WaitAll(list_of_tasks.ToArray());
} 

如果我的文件大小为628MB =&gt;然后list_of_tasks157个任务(628 / MaxChunkSize)。通常我有超过1 TB的文件。我不想拥有如此多的运行任务,如何创建更高效​​的算法?什么是最佳运行任务数?例如,不超过200,任何建议?

1 个答案:

答案 0 :(得分:1)

要按顺序将文件写入同一磁盘吗?

1

并行性仅在您可以实际并行运行任务时才有用。您的共享瓶颈是磁盘访问,如果您同时发出多个写入,这将不会更好 - 相反,它可能会变得更慢,并且它会倾向于争取优先级与其他运行的东西在同一个系统上。

硬盘驱动器针对顺序写入进行了优化。如果您遇到吞吐量问题,只需要更大一些 - 但并行写入很可能会伤害您而不是帮助。

如果您正在处理远程资源,则需要考虑延迟。如果延迟远远高于发送一个块所需的时间,那么并行化可能是值得的,以减少浪费&#34;时间 - 然而,你还需要确保一切都正确同步,并且没有任何节流会伤害你。