DROBNJAK
Assuming we agree that a single core simulates multitasking/threading ...
Yes, you could use threads
There is DuinOS http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1256745982/0
I believe someone has done some work with FreeRTOS, but I don't see it listed (http://www.freertos.org/)
I believe there is a threading simuation for AVR in TinyOS (http://www.tinyos.net/)
The servo library uses interrupts internally to simulate multi-threading (look for servo.cpp), and does support 12 servos/timer. It isn't limited to the number of PWM pins.
This is the sort of technique I might use to drive servo's to a 'script'.
The interrupt service routine (on a different interrupt to the servo library) would simply pick up the next thing to do (stored as data), do it, look in the script for the next action, and adjust the timer to trigger itself when it's needed.
If the need is purely an issue of driving the servo's at a slower speed than maximum, I might be tempted to extend the servo library.
I'd consider adding a servo.write(angle, duration) to make the servo move through the 'angle' and take 'duration' to do it. I like that approach because it puts the problem into a place which is waking up to adjust the servo pulse duration anyway. If I went that far, I'd probably have the servo.attach(), or some new setup-method, take a servo speed parameter to make it work well.
Otherwise, millis() is more appealing than delay(). BUT, please avoid Premature Optimisation ![]()
HTH
GB-)