mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-03-23 04:34:39 +02:00
This represents yet another iteration on how `ignore` enqueues and distributes work in parallel. The original implementation used a multi-producer/multi-consumer thread safe queue from crossbeam. At some point, I migrated to a simple `Arc<Mutex<Vec<_>>>` and treated it as a stack so that we did depth first traversal. This helped with memory usage in very wide directories. But it turns out that a naive stack-behind-a-mutex can be quite a bit slower than something that's a little smarter, such as a work-stealing stack used in this commit. My hypothesis for why this helps is that without the stealing component, work distribution can get stuck in sub-optimal configurations that depend on which directory entries get assigned to a particular worker. It's likely that this can result in some workers getting "more" work than others, just by chance, and thus remain idle. But the work-stealing approach heads that off. This does re-introduce a dependency on parts of crossbeam which is kind of a bummer, but it's carrying its weight for now. Closes #1823, Closes #2591 Ref https://github.com/sharkdp/fd/issues/28
40 lines
1.0 KiB
TOML
40 lines
1.0 KiB
TOML
[package]
|
|
name = "ignore"
|
|
version = "0.4.20" #:version
|
|
authors = ["Andrew Gallant <jamslam@gmail.com>"]
|
|
description = """
|
|
A fast library for efficiently matching ignore files such as `.gitignore`
|
|
against file paths.
|
|
"""
|
|
documentation = "https://docs.rs/ignore"
|
|
homepage = "https://github.com/BurntSushi/ripgrep/tree/master/crates/ignore"
|
|
repository = "https://github.com/BurntSushi/ripgrep/tree/master/crates/ignore"
|
|
readme = "README.md"
|
|
keywords = ["glob", "ignore", "gitignore", "pattern", "file"]
|
|
license = "Unlicense OR MIT"
|
|
edition = "2018"
|
|
|
|
[lib]
|
|
name = "ignore"
|
|
bench = false
|
|
|
|
[dependencies]
|
|
crossbeam-deque = "0.8.3"
|
|
globset = { version = "0.4.10", path = "../globset" }
|
|
lazy_static = "1.1"
|
|
log = "0.4.5"
|
|
memchr = "2.5"
|
|
regex = { version = "1.9.0", default-features = false, features = ["perf", "std", "unicode-gencat"] }
|
|
same-file = "1.0.4"
|
|
thread_local = "1"
|
|
walkdir = "2.2.7"
|
|
|
|
[target.'cfg(windows)'.dependencies.winapi-util]
|
|
version = "0.1.2"
|
|
|
|
[dev-dependencies]
|
|
crossbeam-channel = "0.5.0"
|
|
|
|
[features]
|
|
simd-accel = ["globset/simd-accel"]
|