簡體   English   中英

如何使用 Rayon 和 Rust 將字符串轉換為並行迭代器?

[英]How to turn a string into a parallel iterator using Rayon and Rust?

我正在嘗試將下面的代碼轉換為並行迭代器以提高性能:

// something like this
string.split(" ").enumerate().into_par_iter().for_each(|(_, b)| {
    // do something
});

但是 Rayon 不支持Enumerate結構的.into_par_iter() 對於 Rust 來說相對較新,我不知道如何解決這個問題。 大多數其他問題都涉及向量,但它不在這里,因為我正在嘗試執行以下操作:

  1. 獲取一個字符串: String::from("Lorem ipsum dolor sit amet")
  2. 使用.split(" ").enumerate()把它變成一個向量: vec,["Lorem", "ipsum", "dolor", sit", "amet"]

那么如何讓上面的代碼並行運行呢?

您可以使用.par_bridge()將任何迭代器轉換為並行迭代器:

這通過將其項目分布在 Rayon 線程池中,創建了從順序迭代器到並行迭代器的“橋梁”。 這具有能夠並行化幾乎任何東西的優點,但是生成的 ParallelIterator 可能比使用 par_iter 開始時效率低。 但是,對於難以通過其他方式並行化的迭代器(例如通道或文件或網絡 I/O),它仍然很有用。

生成的迭代器不能保證保持原始迭代器的順序。

use rayon::iter::ParallelBridge;

string.split(" ").enumerate().par_bridge().for_each(|(_, b)| {
    // do something
});

暫無
暫無

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

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