Using Tokio
Tokio is based on the lower-level crate mio, which is itself directly based on system calls such as epoll
(Linux), kqueue
(FreeBSD), and IOCP (Windows). This crate is also based on the futures
crate, which provides abstractions to reason about a value (or multiple values) that will be available later. As I told you when using asynchronous I/O, the calls do not block so we need a way to know when the result of a read is available. This is where Future
and Stream
, two abstractions from the futures
crate, come into play.
Tokio event loop
Tokio also provides an event loop, on which we will be able to execute some code (with futures
) that will be executed when some I/O events happen, such as when the result of a socket read is ready. To do so, the event loop will register events on specific file descriptors that represent sockets. It registers these events using the aforementioned system calls and then waits for any of the registered events to happen. The file descriptors and the system...