I am building an app which uses multiple libraries which starts tokio runtimes. What I am doing at the moment is to initialize them in different threads Is this approach fine or should I consider doing something else ?
Maybe you don't need to create runtimes? There's
tokio::runtime::current() that in
async functions gives a handle to runtime that is running the
async function. You can use that for spawning tasks and pass that to non-async functions.
Each runtime will have its own thread pool and some overhead. It's not too bad if you have only a few of them. Sometimes that's even desirable if you don't want one part of the app to monopolize the runtime and starve another part.
I am using r2d2 postgres which creates its own runtime. In another post alice mentioned using bb8 but I prefer to use the blocking versions of the things. So I have 2 threads at this point starting actix tokio runtime and postgres tokio runtime
It's not ideal, but it isn't the end of the world. Did the crate I suggested in the other thread no do the trick?
It does the trick but with my current design based on traits it doesnt really play nice however I will be taking your advice on that and instead of using traits I will be hiding impl details behind an opaque type.
Working with a concrete type I think I shouldnt have problems having async methods
Thanks a lot.