[英]How to iterate through a directory_iterator in parallel?
std::filesystem::directory_iterator
是LegacyInputIterator
,顯然它不能用於並行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.