In one aspect, this depends on the implementation of a thread specific to that language. In general, however, this is creating a thread, which is an expensive part, not the work of a thread. Thus, some languages (such as .Net) support a thread-stream pool by simply laying around, so you can grab one that is essentially already created, which reduces costs.
The problem with threads also, according to the professor, is that each language has an equivalent to the Thread.Yield () function, but no one actually uses it; therefore, each thread that you encounter is extremely aggressive in planning, which establishes all kinds of wars between mutexes and sempaphores; some threads never start because of the level of aggression used, which in itself is a problem.
Streams have the advantage that they unload functionality from other loops, such as the GUI loop, by increasing the functionality. Events, as far as I know, are still executed in a single thread (unless specifically mentioned).
user978122
source share