With the continued growth of multicore processing, applications containing hundreds—or even thousands—of threads are looming on the horizon. Designing such applications is not a trivial undertaking: programmers must address not only the challenges
Implicit threading is defined by what the programmer no longer has to do: instead of manually creating and managing individual threads, the developer only identifies tasks, units of work that could run in parallel, and hands responsibility for turning those tasks into actual threads over to a library or runtime, typically using the many-to-many model under the hood.