Over the years one of my observations is that programmers go through several stages as they gain more experience:
- Superloop
- Seperate processes
- Back to superloop combined with parallel threads
For real-time systems, that's not too inaccurate
I'd add:
- understand the benefits of specifying, designing and implementing systems using events, states, and processing events (i.e. FSMs)
- each thread processes one event to completion before starting on another
- one thread per core, if possible
- storing process state in an object/struct, not in the program counter associated with a thread
- one level of interrupts (plus powerfail interrupt)
- one level of thread priority