Skip to content

Instantly share code, notes, and snippets.

@rexim
Created December 31, 2019 21:48
Show Gist options
  • Save rexim/d69ba473d8f5138d1806d04965b431b8 to your computer and use it in GitHub Desktop.
Save rexim/d69ba473d8f5138d1806d04965b431b8 to your computer and use it in GitHub Desktop.
use std::io::prelude::*;
fn epic_file_line_counter(file_path: String) -> std::io::Result<usize> {
let file = std::fs::File::open(file_path)?;
let buf_reader = std::io::BufReader::new(file);
Ok(buf_reader.lines().count())
}
fn virgin_single_threaded() {
std::env::args()
.skip(1)
.for_each(|file_path| {
if let Ok(boomer) = epic_file_line_counter(file_path.clone()) {
println!("{}: {}", file_path, boomer)
}
})
}
fn chad_multi_threaded() {
std::env::args()
.skip(1)
.map(|file_path| {
std::thread::spawn(move || {
(file_path.clone(), epic_file_line_counter(file_path.clone()))
})
})
.collect::<Vec<_>>()
.into_iter()
.for_each(|t| {
if let Ok((file_path, Ok(boomer))) = t.join() {
println!("{}: {}", file_path, boomer)
}
});
}
fn main() -> std::io::Result<()> {
// virgin_single_threaded();
chad_multi_threaded();
Ok(())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment