mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-25 15:51:34 +00:00
Make the number of events buffered to/from tasks configurable (#1574)
* Make the number of events buffered to/from tasks configurable * Assign a PR number * Fix comment * Apply suggestions from code review Co-authored-by: Roman Borschel <romanb@users.noreply.github.com> * Rename variables * Apply suggestions from code review Co-authored-by: Roman Borschel <romanb@users.noreply.github.com> Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
This commit is contained in:
@ -123,7 +123,7 @@ use registry::{Addresses, AddressIntoIter};
|
||||
use smallvec::SmallVec;
|
||||
use std::{error, fmt, hash::Hash, io, ops::{Deref, DerefMut}, pin::Pin, task::{Context, Poll}};
|
||||
use std::collections::HashSet;
|
||||
use std::num::NonZeroU32;
|
||||
use std::num::{NonZeroU32, NonZeroUsize};
|
||||
use upgrade::UpgradeInfoSend as _;
|
||||
|
||||
/// Contains the state of the network, plus the way it should behave.
|
||||
@ -1002,6 +1002,48 @@ where TBehaviour: NetworkBehaviour,
|
||||
self
|
||||
}
|
||||
|
||||
/// Configures the number of events from the [`NetworkBehaviour`] in
|
||||
/// destination to the [`ProtocolsHandler`] that can be buffered before
|
||||
/// the [`Swarm`] has to wait. An individual buffer with this number of
|
||||
/// events exists for each individual connection.
|
||||
///
|
||||
/// The ideal value depends on the executor used, the CPU speed, and the
|
||||
/// volume of events. If this value is too low, then the [`Swarm`] will
|
||||
/// be sleeping more often than necessary. Increasing this value increases
|
||||
/// the overall memory usage.
|
||||
pub fn notify_handler_buffer_size(mut self, n: NonZeroUsize) -> Self {
|
||||
self.network_config.set_notify_handler_buffer_size(n);
|
||||
self
|
||||
}
|
||||
|
||||
/// Configures the number of extra events from the [`ProtocolsHandler`] in
|
||||
/// destination to the [`NetworkBehaviour`] that can be buffered before
|
||||
/// the [`ProtocolsHandler`] has to go to sleep.
|
||||
///
|
||||
/// There exists a buffer of events received from [`ProtocolsHandler`]s
|
||||
/// that the [`NetworkBehaviour`] has yet to process. This buffer is
|
||||
/// shared between all instances of [`ProtocolsHandler`]. Each instance of
|
||||
/// [`ProtocolsHandler`] is guaranteed one slot in this buffer, meaning
|
||||
/// that delivering an event for the first time is guaranteed to be
|
||||
/// instantaneous. Any extra event delivery, however, must wait for that
|
||||
/// first event to be delivered or for an "extra slot" to be available.
|
||||
///
|
||||
/// This option configures the number of such "extra slots" in this
|
||||
/// shared buffer. These extra slots are assigned in a first-come,
|
||||
/// first-served basis.
|
||||
///
|
||||
/// The ideal value depends on the executor used, the CPU speed, the
|
||||
/// average number of connections, and the volume of events. If this value
|
||||
/// is too low, then the [`ProtocolsHandler`]s will be sleeping more often
|
||||
/// than necessary. Increasing this value increases the overall memory
|
||||
/// usage, and more importantly the latency between the moment when an
|
||||
/// event is emitted and the moment when it is received by the
|
||||
/// [`NetworkBehaviour`].
|
||||
pub fn connection_event_buffer_size(mut self, n: usize) -> Self {
|
||||
self.network_config.set_connection_event_buffer_size(n);
|
||||
self
|
||||
}
|
||||
|
||||
/// Configures a limit for the number of simultaneous incoming
|
||||
/// connection attempts.
|
||||
pub fn incoming_connection_limit(mut self, n: usize) -> Self {
|
||||
|
Reference in New Issue
Block a user