Crates.io | rayoff |
lib.rs | rayoff |
version | 0.0.2 |
source | src |
created_at | 2022-01-09 22:28:49.535101 |
updated_at | 2022-01-17 07:56:09.616184 |
description | rayon but it's map-reduce |
homepage | |
repository | https://github.com/nhwn/rayoff |
max_upload_size | |
id | 511031 |
size | 47,540 |
Similar to rayon, rayoff
equips iterators with additional
functionality for introducing parallelism. However, instead of using a work-stealing stategy to
ensure threads don't starve for work, rayoff
uses a simpler map-reduce stategy:
In almost all cases, rayon is the superior choice. However,
if your computations won't benefit from work-stealing, then rayoff
may
give you better performance. Disclaimer: rayoff
requires a nightly
compiler (rustc 1.60.0
as of this writing) and internally uses unsafe code. Use at your own risk!
use rayoff::*;
fn check(candidate: &[u8]) -> bool {
candidate == b"orange8"
}
let wordlist = ["apple", "orange", "pear", "banana"];
let cracked_password = wordlist.divvy_cpus().find_map_any(|&word| {
let mut buf = [0u8; 8];
let len = word.len();
buf[..len].copy_from_slice(word.as_bytes());
for i in b'0'..=b'9' {
buf[len] = i;
let password = &buf[..len + 1];
if check(password) {
return Some(password.to_vec());
}
}
None
});
assert_eq!(cracked_password.unwrap(), b"orange8");
rayoff
is dual-licensed under the MIT and Apache 2.0 licenses (see LICENSE-MIT and LICENSE-APACHE for details).