-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Is async/await compatible with io_uring (Linux async io)? #60589
Comments
Rust's However, it isn't tied to any particular operating system or method of delivering notifications of completion of asynchronous events. That is handled by a futures executor, which handles dispatching to the appropriate code to run when notified that I/O is ready. So as long as there is an executor written which is capable of doing I/O via |
Is this ThreadPool (also here atm) an example of one of those executors? I'm surprised to find that there's no |
The Rust async ecosystem is a little confusing right now, as it has been rapidly evolving. There is some custom syntax in the language itself, plus a few traits that need to be provided by the standard library to interact with this syntax and provide the common core functionality. Then there is the If you want event-driven I/O, there is a third party crate, Tokio, which has its own executor and a To summarize:
One thing to note is that
|
Amazing answer @lambda. Thank you, & well- I'm sorry for using so much of your time!!! That's amazingly comprehensive & well linked, thank you. I'd asked some follow-up questions in #wg-async-foundation, and wanted to share some of the learning resources I found there too. Nemo157 pointed me at juliex & romio as other simpler examples that parallel what Tokio does, but at a little closer to my level. They've been helpful in understanding how executors & wakers relate to each other & function- something Tokio seems to make more formal with it's Reactor mechanism. I'm also finding @-withoutboat's Wake API I: what does a waker do? to be helpful in understanding how a basic implementation might function. Last, I happened across the stdweb executor, which is interesting in that it's intended for running in webassembly. Not relevant to io_uring, but a good example of how different & varied executors/wakers/tasks might be. |
Ah, great, glad to hear you were able to get some other references. Yeah, I pointed you to a lot of the full-featured, complex, fairly mature projects, but those other links you got are a lot better for learning how the ecosystem works. |
Closing as resolved. |
Thanks all. |
@rektide tokio-rs/mio#923 is the issue to follow |
Hello all. On Linux, we're getting a new high performance async io implementation called io_uring. I'm curious how Rust is going to be able to interface with this, & how is this going to work with Rust's async/await plans?
I'm afraid my knowledge of Rust's async/await isn't up to par to do much guesswork for how Linux's async io would fit into Rust's async language features. I'm hoping someone around these parts might be willing to take a look & report back with your thoughts on feasibility, and how Rust might leverage Linux's high performance async io mechanism.
The maintainer @axboe also has a very nice PDF write-up of io_ring (which he announced here). From the intro:
The text was updated successfully, but these errors were encountered: