Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 对Azure存储中ListBlob的并行调用不';不会导致性能改进_Asynchronous_F#_Azure Storage Blobs_Parallel.foreach - Fatal编程技术网

Asynchronous 对Azure存储中ListBlob的并行调用不';不会导致性能改进

Asynchronous 对Azure存储中ListBlob的并行调用不';不会导致性能改进,asynchronous,f#,azure-storage-blobs,parallel.foreach,Asynchronous,F#,Azure Storage Blobs,Parallel.foreach,我有代码(用F#编写,但我相信语言的选择并不重要)为Azure blob目录列表中的每个条目调用ListBlob,总共大约50个条目。所有通话的总时间约为20秒。以下是原始代码的外观: enumerateDirectories container |> Seq.map (fun x -> listBlobs x) |> Seq.concat 函数“listBlobs”是Azure blob存储listBlobs方法的简单包装器。由于blob列表彼此独立,我尝试异步运行它们:

我有代码(用F#编写,但我相信语言的选择并不重要)为Azure blob目录列表中的每个条目调用ListBlob,总共大约50个条目。所有通话的总时间约为20秒。以下是原始代码的外观:

enumerateDirectories container
|> Seq.map (fun x -> listBlobs x)
|> Seq.concat
函数“listBlobs”是Azure blob存储listBlobs方法的简单包装器。由于blob列表彼此独立,我尝试异步运行它们:

enumerateDirectories container
|> Seq.map (fun x ->
            async {
                 printfn "listBlobs %s" x 
                 return listBlobs x 
            })
|> Async.Parallel
|> Async.RunSynchronously
|> Seq.concat
但执行时间没有任何改善。然后,我使用pseq模块的并行序列调用更改了F#异步工作流:

enumerateDirectories container
|> PSeq.map (fun x -> listBlobs x)
|> Seq.concat

这提高了执行时间,因此只需要以前的一半。不过,与单个ListBlob调用不到一秒钟相比,它需要大约10秒钟。我想知道为什么。对ListBlob的调用不应该同时执行,这样总时间就可以与单个调用时间加上一些开销相比较吗?

并行查询可能无法获得更高的性能,特别是对于像ListBlob这样的扫描操作。此类操作应受到限制,且不依赖于对延迟敏感的操作,因为性能与对象的数量成正比,并且在需要的资源超过允许的范围时以较低的优先级执行

这就是说,您可以查看存储分析,以确保所有调用实际上都是并发调度的,并且e2e延迟和服务器延迟之间的差异最小

有关更多有用信息,请查看以下链接:


这可能是IO绑定的,并且可能在服务器端。listBlobs本身是异步的还是返回任务?如果不是,异步肯定不会有帮助?ListBlob不是异步的,但是多个ListBlob是并行的,所以每个调用是否同步都不重要。非常感谢!我没有意识到这一点。