Comments (5)
It's always Nagle! :)
from tokio.
Could this be Nagle's algorithm, perhaps?
from tokio.
Could this be Nagle's algorithm, perhaps?
Welp, that was it... setting nodelay
made the issue go away!
from tokio.
I don't have the time to look into this right now, but a few notes:
- The condition variable is how Tokio puts the thread to sleep when it has nothing to do.
- Are you doing IO from a thread that is not a Tokio worker threads?
- Are you observing a lot of movement between worker threads?
from tokio.
The flow is:
- A framed
TcpStream
split into read/write pairs, owned by two tokio tasks (send/recv). - All tasks have flume channels to send/recv data from, with the socket owning task being the only thing with access to the socket.
- There are 8 spawned tasks sending messages to the channel for the sender (outbound sends).
- The recv task is forwarding the incoming messages to one of 8 channels for the spawned tasks.
FWIW: I don't think it's an issue with the 8 spawned tasks hammering the flume channel, because cutting out the socket yields 26million msg/s between the 'tasks' themselves, ignoring the outbound sends.
Let me know if there is any other information that would help with diagnosing this issue! I'm available to debug / do whatever, I just don't know enough about the internals at the moment to get a baseline of where to start.
Simple diagram:
from tokio.
Related Issues (20)
- File IO hangs after timeout / cancellation HOT 2
- Use `[lints.rust.unexpected_cfgs.check-cfg]` instead of hacky check-cfg workaround HOT 2
- Helper struct/wrapper for a stream of named pipe connections HOT 7
- tokio::sync::mpsc::bounded::Receiver<T>::is_empty() returns false when recv().await blocks HOT 3
- Feature tokio::sync::mpsc::Receiver::wait_close(&self) HOT 11
- Panic at linked_list.rs - reborn HOT 5
- Every 32 messages `is_empty()` on `Receiver` and `UnboundedReceiver` returns `false` even though len == 0 HOT 1
- LengthDelimitedCodec misses that last N bytes of the frame with num_skip(0) HOT 1
- Segment fault at `poll_future` HOT 8
- app stuck dropping tokio::runtime::runtime::Runtime HOT 1
- regression: tokio::test in 1.38 eats my tests HOT 6
- Sending data frame followed by trailer frame discards the data frame HOT 3
- Alternative to AsyncDrop HOT 3
- `arcmutex!` convenience macro HOT 1
- Internal panics in `CurrentThread::block_on()` under WSLv1 HOT 11
- Please `impl Default for watch::Sender<T> where T: Default` HOT 1
- Unable to use the docsrs configuration under Windows HOT 1
- tokio build broken for aarch64-apple-visionos HOT 10
- tokio build broken for aarch64-apple-visionos HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tokio.