From c24f8fd50f39437799069ce9ad29d9df9ba8ca97 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Wed, 14 Sep 2016 07:40:46 -0400 Subject: [PATCH] Replace crossbeam with deque. deque appears faster. --- Cargo.lock | 20 ++++++++++++++++---- Cargo.toml | 2 +- src/main.rs | 16 ++++++++-------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6b2d79d3..dc9cac03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,7 +2,7 @@ name = "ripgrep" version = "0.1.1" dependencies = [ - "crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "docopt 0.6.83 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -30,9 +30,12 @@ dependencies = [ ] [[package]] -name = "crossbeam" -version = "0.2.10" +name = "deque" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "docopt" @@ -131,6 +134,14 @@ dependencies = [ "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rand" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "regex" version = "0.1.77" @@ -216,7 +227,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] "checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" -"checksum crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97" +"checksum deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1614659040e711785ed8ea24219140654da1729f3ec8a47a9719d041112fe7bf" "checksum docopt 0.6.83 (registry+https://github.com/rust-lang/crates.io-index)" = "fc42c6077823a361410c37d47c2535b73a190cbe10838dc4f400fe87c10c8c3b" "checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" "checksum fs2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bcd414e5a1a979b931bb92f41b7a54106d3f6d2e6c253e9ce943b7cd468251ef" @@ -228,6 +239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" "checksum memmap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f20f72ed93291a72e22e8b16bb18762183bb4943f0f483da5b8be1a9e8192752" "checksum num_cpus 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a859041cbf7a70ea1ece4b87d1a2c6ef364dcb68749c88db1f97304b9ec09d5f" +"checksum rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2791d88c6defac799c3f20d74f094ca33b9332612d9aef9078519c82e4fe04a5" "checksum regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)" = "64b03446c466d35b42f2a8b203c8e03ed8b91c0f17b56e1f84f7210a257aa665" "checksum regex-syntax 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279401017ae31cf4e15344aa3f085d0e2e5c1e70067289ef906906fdbe92c8fd" "checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b" diff --git a/Cargo.toml b/Cargo.toml index e39c78b4..28d941c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ name = "integration" path = "tests/tests.rs" [dependencies] -crossbeam = "0.2" +deque = "0.3" docopt = "0.6" env_logger = "0.3" grep = { version = "0.1", path = "grep" } diff --git a/src/main.rs b/src/main.rs index fb04188a..aa51ec79 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -extern crate crossbeam; +extern crate deque; extern crate docopt; extern crate env_logger; extern crate grep; @@ -28,7 +28,7 @@ use std::result; use std::sync::{Arc, Mutex}; use std::thread; -use crossbeam::sync::chase_lev::{self, Steal, Stealer}; +use deque::{Stealer, Stolen}; use grep::Grep; use memmap::{Mmap, Protection}; use term::Terminal; @@ -97,8 +97,8 @@ fn run(args: Args) -> Result { let out = Arc::new(Mutex::new(args.out())); let mut workers = vec![]; - let mut workq = { - let (workq, stealer) = chase_lev::deque(); + let workq = { + let (workq, stealer) = deque::new(); for _ in 0..args.threads() { let worker = MultiWorker { chan_work: stealer.clone(), @@ -215,10 +215,10 @@ impl MultiWorker { fn run(mut self) -> u64 { loop { let work = match self.chan_work.steal() { - Steal::Empty | Steal::Abort => continue, - Steal::Data(Work::Quit) => break, - Steal::Data(Work::Stdin) => WorkReady::Stdin, - Steal::Data(Work::File(ent)) => { + Stolen::Empty | Stolen::Abort => continue, + Stolen::Data(Work::Quit) => break, + Stolen::Data(Work::Stdin) => WorkReady::Stdin, + Stolen::Data(Work::File(ent)) => { match File::open(ent.path()) { Ok(file) => WorkReady::DirFile(ent, file), Err(err) => {