Man muss zwischen Multitasking und Multithreading unterscheiden, oft wird das nicht scharf getrennt.
Auf kleinen MCUs ist es Multithreading (time slice scheduling, round-robin), und hier stimmt das so nicht mit Single- vs. Multicores: der Due (M3 SAM) ist z.B. ein Singlecore, der mit der Scheduler Lib recht gutes kooperatives Multithreading kann, dieselbe Lib läuft auch z.B. mit einem M0/Zero (SAMD).
Auch die neuen SAMD M4 (ebenfalls Singlecores) beherrschen laut Arduino Multithreading.
Die Scheduler Lib wurde zwischenzeitlich auch für AVRs portiert, erfordert aber deutich mehr Justierungen für das Speichermanagement.
Hier werden vom Thread Scheduler jedem Thread je eine eigene Zeitscheibe zugeteilt, und bei Wechsel zur nächsten alle Variablen und Register gesichert - ist er wieder dran, werden alle wieder zurückgelesen und dort weitergemacht, wo vorher aufgehört wurde.
Doch auf Multicores läuft es deutlich besser, wie z.B. auf dem ESP32: der kann sogar preemptives Multithreading (ähnlich POSIX pthread und C++ std::thread), wobei jeder seiner beiden Cores genau so time-slice scheduling macht mit sehr vielen Parallel-Threads wie ein Singlecore - grundsätzlich nicht anders, aber hier können eben z.B. 20 Threads auf 2 "Schultern" verteilt werden.
Lesezeichen