Потоки ядра (также называемые облегченными процессами) обрабатываются системой. Они предлагают несколько интересных преимуществ, главным из которых является то, что два потока могут быть запланированы на двух разных процессорах в надежде, что это сократит время выполнения вашего процесса.
Однако потоки часто используются в качестве модели программирования. Типичным примером является многопользовательский веб-сервер, который ожидает входящего соединения и одновременно обменивается данными со своими подключенными клиентами. В этом случае программист может захотеть создать лот потоков и переключаться между ними очень быстро. Системные потоки не очень приспособлены к этому. Количество потоков ядра ограничено (до нескольких непрочитанных), и любая базовая операция (блокировка переключения уничтожения создания) является дорогостоящей, поскольку она должна выполняться в пространстве ядра.
Пользовательские потоки, с другой стороны, могут быть реализованы с использованием set_jmp()
и long_jmp()
внутри пользовательской библиотеки. Поскольку они не включают ядро, приложение может очень эффективно создавать / уничтожать и переключаться между пользовательскими потоками.
Как сказал Эрнест, пользовательские потоки больше не очень распространены, однако существует гибридное решение, которое может использовать преимущества двух миров.
http://en.wikipedia.org/wiki/Thread_(computer_science)#N:M_.28Hybrid_threading.29