Struct veloren_common::slowjob::SlowJobPool
source · pub struct SlowJobPool {
internal: Arc<Mutex<InternalSlowJobPool>>,
}
Expand description
Provides a Wrapper around rayon threadpool to execute slow-jobs. slow means, the job doesn’t need to not complete within the same tick. DO NOT USE I/O blocking jobs, but only CPU heavy jobs. Jobs run here, will reduce the ammount of threads rayon can use during the main tick.
§Configuration
This Pool allows you to configure certain names of jobs and assign them a
maximum number of threads # Example
Your system has 16 cores, you assign 12 cores for slow-jobs.
Then you can configure all jobs with the name CHUNK_GENERATOR
to spawn on
max 50% (6 = cores)
§Spawn Order
- At least 1 job of a configuration is allowed to run if global limit isn’t hit.
- remaining capacities are spread in relation to their limit. e.g. a configuration with double the limit will be sheduled to spawn double the tasks, starting by a round robin.
§States
- queued
- spawned
- started
- finished
let threadpool = rayon::ThreadPoolBuilder::new()
.num_threads(16)
.build()
.unwrap();
let pool = SlowJobPool::new(3, 10, Arc::new(threadpool));
pool.configure("CHUNK_GENERATOR", |n| n / 2);
pool.spawn("CHUNK_GENERATOR", move || println!("this is a job"));
Fields§
§internal: Arc<Mutex<InternalSlowJobPool>>
Implementations§
source§impl SlowJobPool
impl SlowJobPool
pub fn new( global_limit: u64, jobs_metrics_cnt: usize, threadpool: Arc<ThreadPool>, ) -> Self
sourcepub fn configure<F>(&self, name: &str, f: F)
pub fn configure<F>(&self, name: &str, f: F)
configure a NAME to spawn up to f(n) threads, depending on how many threads we globally have available
sourcepub fn try_run<F>(&self, name: &str, f: F) -> Result<SlowJob, ()>
pub fn try_run<F>(&self, name: &str, f: F) -> Result<SlowJob, ()>
spawn a new slow job on a certain NAME IF it can run immediately
pub fn spawn<F>(&self, name: &str, f: F) -> SlowJob
pub fn cancel(&self, job: SlowJob) -> Result<(), SlowJob>
pub fn take_metrics(&self) -> HashMap<String, Vec<JobMetrics>>
Trait Implementations§
source§impl Clone for SlowJobPool
impl Clone for SlowJobPool
source§fn clone(&self) -> SlowJobPool
fn clone(&self) -> SlowJobPool
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for SlowJobPool
impl RefUnwindSafe for SlowJobPool
impl Send for SlowJobPool
impl Sync for SlowJobPool
impl Unpin for SlowJobPool
impl UnwindSafe for SlowJobPool
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more