I've implemented A* search (or was it B*? I forget) in a pretty unoptimal way, and I could easily calculate well over 20000 routes per frame while still getting over 200 FPS. (On a map with 4000 nodes, each with up to 6 links with neighbours, and each route had anywhere from 1 to 1000 steps between them)
The engine in its entirety is single threaded and I was using a pretty crappy CPU at the time I believe was clocked at 2.2GHz.
And my crappy implementation also included some smoothing passes so that route a -> b -> c would become a -> c if there was a direct link between a and c.
Even then, that's not very relevant, as Immortal said, you'd generally calculate the route once and then cache it in the entity, and this would basically be a list of around 10-100 nodes to visit in sequence.
I stored them in reverse order, so that the next entity to visit was at the end, which is great for performance since you just pop the last one off of the list without needing to shuffle the rest of it down, plus you can append any arbitrary nodes you want easily in case you ever want the entity to take a small detour to dodge projectiles among other things.
My shitty implementation also doesn't account for any environmental factors, like how busy a node is (can be done many ways, you might check how many entities is currently in a zone if you've the structures for it, or entities might +1 any routes they're currently using) or how quickly you can travel across it (you'd probably use this as a small multiplier against the distance so slow nodes get a lot less action), or any interactive objects that teleport things around.
So there's plenty of processing power to direct here for better calculations, and that's with my implementation's shittiness, which among other things calculates a score on every node before it attempts route calculation, has no recursive data structure to speedup worldspace lookup so I have to examine all the nodes when I want the closest one.