[[!meta copyright="Copyright © 2002, 2003, 2010 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] A Mach *thread* belongs to exactly one [[task]], and is the means of execution. The task supplies the resources. Mach threads are implemented inside the [[kernel]], like in many operating systems, unlike some user-level thread packages (aka "green" threads). A thread (theoretically) runs concurrently with all the other threads of a system. If the system provides several processors, they can be used for simultaneously running either several threads of the same task, or several threads of different tasks. [[!tag open_issue_documentation]] (But this is currently not support in [[GNU Mach|gnumach]].) It is easy for the kernel to switch execution from one thread to another one inside the same task: essentially, it only involves exchanging a few processor registers' state. Threads have scheduling parameters and maintain various statistics about themselves. On GNU/Hurd, APIs for Mach threads and thereabouts are provided by the [[hurd/libthreads]] (cthreads), and [[libpthread]] (POSIX Threads) packages. A task backing a thread is the basis for a [[UNIX process|unix/process]].