簡體   English   中英

如何並行遍歷 directory_iterator?

[英]How to iterate through a directory_iterator in parallel?

std::filesystem::directory_iteratorLegacyInputIterator ,顯然它不能用於並行std::for_each

我可以遍歷directory_iterator ,獲取項目,將它們放在一個向量中,然后使用該向量進行並行迭代。

上面的步驟可以省略嗎? 有沒有辦法像這樣並行遍歷directory_iterator

std::for_each(
    std::execution::par_unseq, // This is ignored currently
    std::filesystem::begin(dir_it),
    std::filesystem::end(dir_it),
    func
);

directory_iterator是一個輸入迭代器,這意味着它在遍歷期間生成值。 此外,對同一目錄的多次遍歷可能會產生不同的值序列(就順序和值本身而言),這意味着遍歷不可重新啟動。

對於並行算法,這意味着不能對序列進行分區,迭代必須在一個線程中按順序進行。 並行化處理的唯一機會是將func執行卸載到單獨的線程,這可能有效也可能無效。 文件系統迭代很昂貴,甚至可能比func中的處理更昂貴。 在這種情況下,您可能會觀察到func被順序調用,當每個調用都在迭代器增量之前完成時。

允許標准庫實現忽略執行策略參數並串行執行算法。 例如,如果無法對輸入序列進行分區,則實現可能根本不需要並行化 function 調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM