在引入线程的操作系统中,进程是资源分配的基本单位,线程是独立调度的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
线程分为两种:
名称 | 描述 |
---|---|
用户级线程(User-Level Thread, ULT) | 由应用程序所支持的线程实现, 对内核不可见 |
内核级线程(Kernel-Level Thread, KLT) | 内核级线程又称为内核支持的线程 |
组合线程(Hybrid Multithreading)是一种别的实现方式而不是线程的种类。
1 用户级线程
1.1 用户级线程实现方式
有关线程管理的所有工作都由应用程序完成,内核意识不到多线程的存在。
用户级线程仅存在于用户空间中,此类线程的创建、撤销、线程之间的同步与通信功能,都无法利用系统调用来实现。
应用程序需要通过使用线程库来控制线程。通常,应用程序从单线程起始,在该线程中开始运行,在其运行的任何时刻,可以通过调用线程库中的派生创建一个在相同进程中运行的新线程。由于线程在进程内切换的规则远比进程调度和切换的规则简单,不需要进行用户态/核心态切换,所以切换速度快。
用户线程多见于一些历史悠久的操作系统,例如Unix操作系统。
因为用户级线程驻留在用户空间,且管理和控制它们的线程也在用户空间,每个线程并不具有自身的线程上下文,所以它们对于操作系统是不可见的,这也就是它无法被