They’re just latent actions under the hood, they run a counter in C++ which triggers the output node once it is finished.
The bigger question is not performance but how you will end up structuring your code. A big bunch of delay nodes easily becomes a tangled mess impossible to manage. You might want to rather count the amount of time passed and then send the event or something similar.