Ja deine App ist singlethreaded.
Du kannst aber timeouts bauen, also kann es durchaus sein, dass da ein bisschen was an Zeug "gleichzeitig" abläuft. Timeout läuft aus und Funktion dahinter wird aktiviert und gleichzeitig wird eine Funktion eingegeben oder eiun User joined

Aber du musst keine Race Conditions beachten.