操作系统-线程实现的两种方式:用户空间与内核中
Keep Team Lv1

在用户空间中实现进程

特点:

整个线程包都会被放入用户空间之中,而内核对线程包一无所知。从内核的角度来说,他的管理方式就是普通的单线程进程。

优点:

  • 用户级线程包可以在不支持线程的操作系统上实现
  • 这种方式的线程切换明显比内核的方式要快
  • 允许每个进程自定义其自己的调度算法

缺点

  • 当线程进行I/O操作或页面故障引起阻塞的时候,如果调用阻塞系统调用则由于内核不知道有多线程存在,会阻塞整个进程而导致所有线程都被阻塞
  • 一个单独的进程内部不存在时钟中断,所以不可能使用轮转调度的方式来调度线程


在内核中实现进程

特点:

当某个线程希望创建一个新的线程或者撤销一个已有的线程的时候,它会进行一个系统调用,这个系统调用通过对线程的更新来完成线程创建或撤销工作

优点:

  • 所有能阻塞线程的调用都以系统调用的形式实现
  • 如果某个线程引起了页面障碍,内核可以很方便的检查该进程是否有任何其他可运行的线程


混合实现

使用内核级线程,然后将用户级线程与某些或全部内核线路多路复用,如下图