That said, Tonic actually has a pretty good performance in their two-core benchmark, even if it's not at the top. Beyond that, I see two things you could change in their implementation that would increase it's performance on the benchmark, though one of them might not be an improvement on real-world workloads (it depends on the application).
It seems like performance is important to you and you are upset because there are other libraries in other languages which are faster than Tonic.
If so, I would suggest looking at alternative GRPC libraries (the article you linked in your other post mentioned grpc-rs) or run a Tonic server through a profiler so you can answer questions about performance yourself. You might even be able to contribute a pull request back to Tonic to help speed things up for everyone!
I understand you might be feeling frustrated but yelling at people in this forum won't get you anywhere.
I'm going to assume that the way you came across initially is a language barrier problem, and I will try to answer more directly.
In general, Tonic is able to run independently on several threads without there being any extra performance cost compared to single-threaded.
One of the things that's hurting Rust's performance in that particular benchmark is that the accept loop is running directly inside a call to block_on. This can be a performance problem because a tokio::spawn task will never run on the same thread as a block_on task, which means that all connections must be transferred to another Tokio thread before they can be processed.
Moving the accept loop into a spawned task can help because then it is possible for tasks to be executed without having to move them to another thread.