posted on 2008-06-01, 00:00authored bySeth C. Goldstein
Many modern parallel languages support dynamic creation of threads or require
multithreading in their implementations. The threads describe the logical parallelism in the
program. For ease of expression and better resource utilization, the logical parallelism in
a program often exceeds the physical parallelism of the machine and leads to applications
with many fine-grained threads. In practice, however, most logical threads need not be
independent threads. Instead, they could be run as sequential calls, which are inherently
cheaper than independent threads. The challenge is that one cannot generally predict which
logical threads can be implemented as sequential calls. In lazy multithreading systems each
logical thread begins execution sequentially (with the attendant efficient stack management
and direct transfer of control and data). Only if a thread truly must execute in parallel
does it get its own thread of control.