用户级线程
概念
- 使用应用程序线程库创建,存在于用户态
- 操作系统不知道线程的细节,只能看到一个进程,这也导致了系统只能以对待整个进程的方式对待整个线程,导致了用户级线程的以下缺点。
优点
- 线程切换不需要切换到内核空间(请对比下面的内核级线程)
- 可根据自己需要选择不同的调度算法(这点容易被忽略)
- 用户级线程的实现和操作系统无关
缺点
- 当进程中有一个线程阻塞时,整个进程都阻塞
- 不能发挥多处理机的优势,操作系统内核看不到用户级多线程的存在,只能以单个进程进行调度,此时内部众多线程串行运行
关于这里有道题:
给你100个用户级线程,100个内核级线程,为什么用户级线程的运行时间是内核级的100倍?
因为用户级多线程本质上还是属于串行运行,处理机运行这100个用户级线程的时候相当于运行这个大的进程,然后里面的100个用户级线程排队运行。与此做对照的是内核级线程,属于真正的并行,100个内核级线程并行运行,时间为一个内核级线程运行的时间。
内核级线程
概念
- 线程运行需要内核的支持
优点
- 能够发挥多处理机的优势,实现真正的多线程,这里的多线程程序一般是使用操作系统提供的系统调用实现的
- 进程中的一个线程被阻塞,不影响其他线程的运行
缺点
- 由于很多工作需要切换到内核态,切换开销大,效率低