Interrupts should be the only way to directly control servos; there's no other way to generate that type of strict timing. There may be an upper limit on how many servos you can run if the rest of your code is very time consuming, but it wouldn't be impossible to control as many servos as I/O pins and still be able to do other processing. This would involve sorting the servo pulses from shortest to longest, finding the time interval between each two pulses, converting that time interval into clock cycles/counter increments and then setting a timer to interrupt after that amount of cycles/increments has elapsed. If you need to control multiple servos, just get a servo controller ($30-$40); it will allow you to just "set and forget" the servo position and it will constantly update the servo. Many servo controllers also have automatic ramping, so you can set the rate that it goes to any given position (without a servo controller, this would be accomplished with a for loop).