Name |
Date |
Size |
#Lines |
LOC |
||
---|---|---|---|---|---|---|
.. | - | - | ||||
src/ | 25-Apr-2025 | - | 26,030 | 17,448 | ||
tests/ | 25-Apr-2025 | - | 1,722 | 1,434 | ||
.cargo-checksum.json | D | 25-Apr-2025 | 10.7 KiB | 1 | 1 | |
Android.bp | D | 25-Apr-2025 | 873 | 35 | 31 | |
Cargo.toml | D | 25-Apr-2025 | 1.3 KiB | 62 | 54 | |
FAQ.md | D | 25-Apr-2025 | 9 KiB | 228 | 188 | |
LICENSE | D | 25-Apr-2025 | 10.6 KiB | 202 | 169 | |
LICENSE-APACHE | D | 25-Apr-2025 | 10.6 KiB | 202 | 169 | |
LICENSE-MIT | D | 25-Apr-2025 | 1 KiB | 26 | 22 | |
METADATA | D | 25-Apr-2025 | 368 | 18 | 17 | |
MODULE_LICENSE_APACHE2 | D | 25-Apr-2025 | 0 | |||
README.md | D | 25-Apr-2025 | 5.5 KiB | 145 | 111 | |
RELEASES.md | D | 25-Apr-2025 | 34 KiB | 884 | 699 | |
TEST_MAPPING | D | 25-Apr-2025 | 412 | 20 | 19 | |
cargo_embargo.json | D | 25-Apr-2025 | 25 | 4 | 3 |
README.md
1# Rayon 2 3[](https://crates.io/crates/rayon) 4[](https://docs.rs/rayon) 5 6[](https://github.com/rayon-rs/rayon/actions) 7[](https://gitter.im/rayon-rs/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 8 9Rayon is a data-parallelism library for Rust. It is extremely 10lightweight and makes it easy to convert a sequential computation into 11a parallel one. It also guarantees data-race freedom. (You may also 12enjoy [this blog post][blog] about Rayon, which gives more background 13and details about how it works, or [this video][video], from the Rust 14Belt Rust conference.) Rayon is 15[available on crates.io](https://crates.io/crates/rayon), and 16[API documentation is available on docs.rs](https://docs.rs/rayon). 17 18[blog]: https://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/ 19[video]: https://www.youtube.com/watch?v=gof_OEv71Aw 20 21## Parallel iterators and more 22 23Rayon makes it drop-dead simple to convert sequential iterators into 24parallel ones: usually, you just change your `foo.iter()` call into 25`foo.par_iter()`, and Rayon does the rest: 26 27```rust 28use rayon::prelude::*; 29fn sum_of_squares(input: &[i32]) -> i32 { 30 input.par_iter() // <-- just change that! 31 .map(|&i| i * i) 32 .sum() 33} 34``` 35 36[Parallel iterators] take care of deciding how to divide your data 37into tasks; it will dynamically adapt for maximum performance. If you 38need more flexibility than that, Rayon also offers the [join] and 39[scope] functions, which let you create parallel tasks on your own. 40For even more control, you can create [custom threadpools] rather than 41using Rayon's default, global threadpool. 42 43[Parallel iterators]: https://docs.rs/rayon/*/rayon/iter/index.html 44[join]: https://docs.rs/rayon/*/rayon/fn.join.html 45[scope]: https://docs.rs/rayon/*/rayon/fn.scope.html 46[custom threadpools]: https://docs.rs/rayon/*/rayon/struct.ThreadPool.html 47 48## No data races 49 50You may have heard that parallel execution can produce all kinds of 51crazy bugs. Well, rest easy. Rayon's APIs all guarantee **data-race 52freedom**, which generally rules out most parallel bugs (though not 53all). In other words, **if your code compiles**, it typically does the 54same thing it did before. 55 56For the most, parallel iterators in particular are guaranteed to 57produce the same results as their sequential counterparts. One caveat: 58If your iterator has side effects (for example, sending methods to 59other threads through a [Rust channel] or writing to disk), those side 60effects may occur in a different order. Note also that, in some cases, 61parallel iterators offer alternative versions of the sequential 62iterator methods that can have higher performance. 63 64[Rust channel]: https://doc.rust-lang.org/std/sync/mpsc/fn.channel.html 65 66## Using Rayon 67 68[Rayon is available on crates.io](https://crates.io/crates/rayon). The 69recommended way to use it is to add a line into your Cargo.toml such 70as: 71 72```toml 73[dependencies] 74rayon = "1.8" 75``` 76 77To use the parallel iterator APIs, a number of traits have to be in 78scope. The easiest way to bring those things into scope is to use the 79[Rayon prelude](https://docs.rs/rayon/*/rayon/prelude/index.html). In 80each module where you would like to use the parallel iterator APIs, 81just add: 82 83```rust 84use rayon::prelude::*; 85``` 86 87Rayon currently requires `rustc 1.63.0` or greater. 88 89### Usage with WebAssembly 90 91Rayon can work on the Web via WebAssembly, but requires an adapter and 92some project configuration to account for differences between 93WebAssembly threads and threads on the other platforms. 94 95Check out the 96[wasm-bindgen-rayon](https://github.com/GoogleChromeLabs/wasm-bindgen-rayon) 97docs for more details. 98 99## Contribution 100 101Rayon is an open source project! If you'd like to contribute to Rayon, 102check out 103[the list of "help wanted" issues](https://github.com/rayon-rs/rayon/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). 104These are all (or should be) issues that are suitable for getting 105started, and they generally include a detailed set of instructions for 106what to do. Please ask questions if anything is unclear! Also, check 107out the 108[Guide to Development](https://github.com/rayon-rs/rayon/wiki/Guide-to-Development) 109page on the wiki. Note that all code submitted in PRs to Rayon is 110assumed to 111[be licensed under Rayon's dual MIT/Apache 2.0 licensing](https://github.com/rayon-rs/rayon/blob/master/README.md#license). 112 113## Quick demo 114 115To see Rayon in action, check out the `rayon-demo` directory, which 116includes a number of demos of code using Rayon. For example, run this 117command to get a visualization of an N-body simulation. To see the 118effect of using Rayon, press `s` to run sequentially and `p` to run in 119parallel. 120 121```text 122> cd rayon-demo 123> cargo run --release -- nbody visualize 124``` 125 126For more information on demos, try: 127 128```text 129> cd rayon-demo 130> cargo run --release -- --help 131``` 132 133## Other questions? 134 135See [the Rayon FAQ][faq]. 136 137[faq]: https://github.com/rayon-rs/rayon/blob/master/FAQ.md 138 139## License 140 141Rayon is distributed under the terms of both the MIT license and the 142Apache License (Version 2.0). See [LICENSE-APACHE](LICENSE-APACHE) and 143[LICENSE-MIT](LICENSE-MIT) for details. Opening a pull request is 144assumed to signal agreement with these licensing terms. 145