Skip to content

Commit b3c025f

Browse files
author
HeroicKatora
authored
Merge pull request #214 from paolobarbolini/threads-from-rayon
Use rayon threads when the rayon feature is enabled
2 parents 49f05ab + 488efc5 commit b3c025f

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

src/worker/multithreaded.rs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
77
use decoder::MAX_COMPONENTS;
88
use error::Result;
9-
use std::{mem, sync::mpsc::{self, Sender}};
10-
use std::thread;
9+
use std::{mem, io, sync::mpsc::{self, Sender}};
1110
use super::{RowData, Worker};
1211
use super::immediate::ImmediateWorker;
1312

@@ -57,10 +56,9 @@ impl Worker for MultiThreadedWorker {
5756
}
5857

5958
fn spawn_worker_thread(component: usize) -> Result<Sender<WorkerMsg>> {
60-
let thread_builder = thread::Builder::new().name(format!("worker thread for component {}", component));
6159
let (tx, rx) = mpsc::channel();
6260

63-
thread_builder.spawn(move || {
61+
spawn(component, move || {
6462
let mut worker = ImmediateWorker::new_immediate();
6563

6664
while let Ok(message) = rx.recv() {
@@ -84,4 +82,24 @@ fn spawn_worker_thread(component: usize) -> Result<Sender<WorkerMsg>> {
8482
})?;
8583

8684
Ok(tx)
87-
}
85+
}
86+
87+
#[cfg(feature = "rayon")]
88+
fn spawn<F>(_component: usize, func: F) -> io::Result<()>
89+
where
90+
F: FnOnce() + Send + 'static,
91+
{
92+
rayon::spawn(func);
93+
Ok(())
94+
}
95+
96+
#[cfg(not(feature = "rayon"))]
97+
fn spawn<F>(component: usize, func: F) -> io::Result<()>
98+
where
99+
F: FnOnce() + Send + 'static,
100+
{
101+
let thread_builder =
102+
std::thread::Builder::new().name(format!("worker thread for component {}", component));
103+
thread_builder.spawn(func)?;
104+
Ok(())
105+
}

0 commit comments

Comments
 (0)