ts/executor: replace tokio with smol-like implementation
The threadshare
executor was based on a modified version of tokio
which implemented the throttling strategy in the BasicExecutor
.
Upstream tokio
codebase has significantly diverged from what it
was when the throttling strategy was implemented making it hard
to follow. This means that we can hardly get updates from the
upstream project and when we cherry pick fixes, we can't reflect
the state of the project on our fork's version. As a consequence,
tools such as cargo-deny
can't check for RUSTSEC fixes in our fork.
The smol
ecosystem makes it quite easy to implement and maintain
a custom async
executor. This MR imports the smol
parts that
need modifications to comply with the threadshare
model and implements
a throttling executor in place of the tokio
fork.
Networking tokio
specific types are replaced with Async
wrappers
in the spirit of smol-rs/async-io
. Note however that the Async
wrappers needed modifications in order to use the per thread
Reactor
model. This means that higher level upstream networking
crates such as async-net
can not be used with our Async
implementation.
Based on the example
benchmark
with ts-udpsrc
, performances seem on par
with what we achieved using the tokio fork.
Fixes gstreamer/gst-plugins-rs#118 (closed)
Related to gstreamer/gst-plugins-rs!604 (merged)