pub enum ZRuntime {
Application,
Acceptor,
TX,
RX,
Net,
}
Expand description
ZRuntime
, the access point of manipulate runtimes within zenoh.
The runtime parameter can be configured by setting the environmental variable ZENOH_RUNTIME_ENV
.
The parsing syntax use RON. An example configuration looks
like
ZENOH_RUNTIME='(
rx: (handover: app),
acc: (handover: app),
app: (worker_threads: 2),
tx: (max_blocking_threads: 1)
)'
Note: The runtime parameter takes effect at the beginning of the zenoh process and no longer be changed after the initialization.
Variants§
Application
Renamed to app. Default param: worker_threads = 1.
Acceptor
Renamed to acc. Default param: worker_threads = 1.
TX
Renamed to tx. Default param: worker_threads = 1.
RX
Renamed to rx. Default param: worker_threads = 2.
Net
Renamed to net. Default param: worker_threads = 1.
Implementations§
Methods from Deref<Target = Handle>§
Sourcepub fn enter(&self) -> EnterGuard<'_>
pub fn enter(&self) -> EnterGuard<'_>
Enters the runtime context. This allows you to construct types that must
have an executor available on creation such as Sleep
or
TcpStream
. It will also allow you to call methods such as
tokio::spawn
and Handle::current
without panicking.
§Panics
When calling Handle::enter
multiple times, the returned guards
must be dropped in the reverse order that they were acquired.
Failure to do so will result in a panic and possible memory leaks.
§Examples
use tokio::runtime::Runtime;
let rt = Runtime::new().unwrap();
let _guard = rt.enter();
tokio::spawn(async {
println!("Hello world!");
});
Do not do the following, this shows a scenario that will result in a panic and possible memory leak.
use tokio::runtime::Runtime;
let rt1 = Runtime::new().unwrap();
let rt2 = Runtime::new().unwrap();
let enter1 = rt1.enter();
let enter2 = rt2.enter();
drop(enter1);
drop(enter2);
Sourcepub fn spawn<F>(&self, future: F) -> JoinHandle<<F as Future>::Output>
pub fn spawn<F>(&self, future: F) -> JoinHandle<<F as Future>::Output>
Spawns a future onto the Tokio runtime.
This spawns the given future onto the runtime’s executor, usually a thread pool. The thread pool is then responsible for polling the future until it completes.
The provided future will start running in the background immediately
when spawn
is called, even if you don’t await the returned
JoinHandle
.
See module level documentation for more details.
§Examples
use tokio::runtime::Runtime;
// Create the runtime
let rt = Runtime::new().unwrap();
// Get a handle from this runtime
let handle = rt.handle();
// Spawn a future onto the runtime using the handle
handle.spawn(async {
println!("now running on a worker thread");
});
Sourcepub fn spawn_blocking<F, R>(&self, func: F) -> JoinHandle<R>
pub fn spawn_blocking<F, R>(&self, func: F) -> JoinHandle<R>
Runs the provided function on an executor dedicated to blocking operations.
§Examples
use tokio::runtime::Runtime;
// Create the runtime
let rt = Runtime::new().unwrap();
// Get a handle from this runtime
let handle = rt.handle();
// Spawn a blocking function onto the runtime using the handle
handle.spawn_blocking(|| {
println!("now running on a worker thread");
});
Sourcepub fn block_on<F>(&self, future: F) -> <F as Future>::Outputwhere
F: Future,
pub fn block_on<F>(&self, future: F) -> <F as Future>::Outputwhere
F: Future,
Runs a future to completion on this Handle
’s associated Runtime
.
This runs the given future on the current thread, blocking until it is complete, and yielding its resolved result. Any tasks or timers which the future spawns internally will be executed on the runtime.
When this is used on a current_thread
runtime, only the
Runtime::block_on
method can drive the IO and timer drivers, but the
Handle::block_on
method cannot drive them. This means that, when using
this method on a current_thread
runtime, anything that relies on IO or
timers will not work unless there is another thread currently calling
Runtime::block_on
on the same runtime.
§If the runtime has been shut down
If the Handle
’s associated Runtime
has been shut down (through
Runtime::shutdown_background
, Runtime::shutdown_timeout
, or by
dropping it) and Handle::block_on
is used it might return an error or
panic. Specifically IO resources will return an error and timers will
panic. Runtime independent futures will run as normal.
§Panics
This function panics if the provided future panics, if called within an asynchronous execution context, or if a timer future is executed on a runtime that has been shut down.
§Examples
use tokio::runtime::Runtime;
// Create the runtime
let rt = Runtime::new().unwrap();
// Get a handle from this runtime
let handle = rt.handle();
// Execute the future, blocking the current thread until completion
handle.block_on(async {
println!("hello");
});
Or using Handle::current
:
use tokio::runtime::Handle;
#[tokio::main]
async fn main () {
let handle = Handle::current();
std::thread::spawn(move || {
// Using Handle::block_on to run async code in the new thread.
handle.block_on(async {
println!("hello");
});
});
}
Sourcepub fn runtime_flavor(&self) -> RuntimeFlavor
pub fn runtime_flavor(&self) -> RuntimeFlavor
Returns the flavor of the current Runtime
.
§Examples
use tokio::runtime::{Handle, RuntimeFlavor};
#[tokio::main(flavor = "current_thread")]
async fn main() {
assert_eq!(RuntimeFlavor::CurrentThread, Handle::current().runtime_flavor());
}
use tokio::runtime::{Handle, RuntimeFlavor};
#[tokio::main(flavor = "multi_thread", worker_threads = 4)]
async fn main() {
assert_eq!(RuntimeFlavor::MultiThread, Handle::current().runtime_flavor());
}
Sourcepub fn metrics(&self) -> RuntimeMetrics
pub fn metrics(&self) -> RuntimeMetrics
Returns a view that lets you get information about how the runtime is performing.
Trait Implementations§
Source§impl Borrow<RuntimeParam> for ZRuntime
Borrow the underlying RuntimeParam
from ZRuntime
impl Borrow<RuntimeParam> for ZRuntime
Borrow the underlying RuntimeParam
from ZRuntime