That's why I use Simple Multi-tasking, I don't have to learn another abstraction when I move from board to board
Yes technically true see ESP-IDF preemptive multthreading by std::thread for arduino-esp32 works faulty simultaneously to Arduino main loop (IDFGH-1247) · Issue #3544 · espressif/esp-idf · GitHub
BUT functionally you need to add yields and delays to get it to run so it appears, to the programmer, to be a cooperative RTOS