PWM or switch port programmatically for Servo
Using a hardware timer channel will save the processor having to constantly pay attention to the servo output port (which comes at the expense of ability to pay attention to other software tasks).

It will also likely reduce the jitter or time-to-time variation which can result if the processor takes a variable number of clock cycles to drop whatever it was doing and make a context switch to the code which changes the output.  The more complex the other tasks required of the processor, the more likely jitter is to be a challenge.

That said, most servos expect a pulse only 50 times or so per second, which could be just 100 events a second to service.  A compact system without other pressing responsibilities may be able to do that reasonably.  In contrast, something more like a PC with a multitasking operating system may struggle to execute events with regular timing.  A "real time operating system" attempts to provide the best of both worlds - rock steady low-latency events, plus the ability to schedule a variety of more abstract tasks.

I'm not ultimately sure how a servo would respond to a few percent jitter.  It's unlikely that the system can mechanically move much within the 20ms period between pulses, but such variation could prevent the servo loop from ever settling, and instead keep it actuating the motor "hunting" for a position match.  Yet lots of cheap servos of the sort people buy for hobby microcontroller products may end up doing that all by themselves anyway.