Struct snowflake::ProcessUniqueId
[−]
[src]
pub struct ProcessUniqueId { /* fields omitted */ }
Process unique IDs are guaranteed to be unique within the current process, for the lifetime of the current process.
- ID creation should be highly performant even on highly concurrent systems. It's MUCH faster than using random/time based IDs (but, on the other hand, only unique within a process).
- While this crate can run out of process unique IDs, this is very unlikely assuming a sane threading model and will panic rather than potentially reusing unique IDs.
Limits
The unique ID's are sizeof(usize) + 64
bits wide and are generated by combining a usize
global counter value with a 64bit thread local offset. This is important because each thread
that calls new()
at least once will reserve at least 264 IDs. So, the only way to run out of
IDs in a reasonable amount of time is to run a 32bit system, spawn 232 threads, and claim one
ID on each thread. You might be able to do this on a 64bit system but it would take a while...
TL; DR: Don't create unique IDs from over 4 billion different threads on a 32bit system.
Methods
impl ProcessUniqueId
[src]
fn new() -> Self
Create a new unique ID.
panics if there are no more unique IDs available. If this happens, go home and reevaluate your threading model!
Trait Implementations
impl Copy for ProcessUniqueId
[src]
impl Clone for ProcessUniqueId
[src]
fn clone(&self) -> ProcessUniqueId
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0
Performs copy-assignment from source
. Read more
impl PartialEq for ProcessUniqueId
[src]
fn eq(&self, __arg_0: &ProcessUniqueId) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, __arg_0: &ProcessUniqueId) -> bool
This method tests for !=
.
impl Eq for ProcessUniqueId
[src]
impl PartialOrd for ProcessUniqueId
[src]
fn partial_cmp(&self, __arg_0: &ProcessUniqueId) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, __arg_0: &ProcessUniqueId) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, __arg_0: &ProcessUniqueId) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, __arg_0: &ProcessUniqueId) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, __arg_0: &ProcessUniqueId) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl Ord for ProcessUniqueId
[src]
fn cmp(&self, __arg_0: &ProcessUniqueId) -> Ordering
This method returns an Ordering
between self
and other
. Read more
impl Hash for ProcessUniqueId
[src]
fn hash<__H: Hasher>(&self, __arg_0: &mut __H)
Feeds this value into the given [Hasher
]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more