# Thread - Properties of a thread (different from [[process]]) - Does not have its own memory space (stack still needs to be preallocated, which takes virtual memory but not physical memory until stack traces are needed.) - One process can create multiple threads - Potentially more efficient than process -- does not require context switching - Inflexible -- schedule may switch to a thread even when it's still waiting. - Multi-threaded programs are extremely difficulty to design. > [!QUOTE] > > Second, and more important, we did not (and still do not) believe in the standard multithreading model, which is **preemptive concurrency with shared memory**: we still think that no one can write correct programs in a language where “a = a + 1” is not deterministic. — Roberto Ierusalimschy et al., “The Evolution of Lua” - Implementation of Thread - Can be implemented either in User Space or in Kernel Space, depending on where the **_thread table_** is hosted. - User-Level Thread: JVM - Kernel-Level Thread: POSIX Thread (`pthread`)