进程的实现只能由操作系统内核来实现,而不存在用户态实现的情况。但是对于线程就不同了,线程的管理者可以是用户也可以是操作系统本身,线程是进程内部的东西,当然存在由进程直接管理线程的可能性。因此线程的实现就应该分为内核态线程实现和用户态线程实现。
内核态线程实现:
线程是进程的不同执行序列,也就是说线程是独立运行的基本单位,也是CPU调度的基本单位。
那么操作系统是如何实现管理线程的呢?
首先操作系统向管理进程一样,应该保持维护线程的所有资源,将线程控制块存放在操作系统的内核空间中。
那么此时操作系统就同时掌管进程控制块和线程控制块。
内核态线程的好处是:
1.用户编程简单;
2.如果一个线程执行阻塞操作,操作系统可以从容的调度另外一个线程的执行。
内核线程的实现缺点是:
1.效率低,因为线程在内核态实现,每次线程切换都需要陷入到内核,由操作系统来调度,而有用户态切换到内核态是要话费很多时间的,另外内核态实现会占用内核稀有的资源,因为操作系统要维护线程列表,操作系统所占内核空间一旦装载后就无法动态改变,并且线程的数量远远大于进程的数量,随着线程数的增加内核将耗尽;
2.内核态的实现需要修改操作系统,这个是谁都不想要做的事情;
用户态是如何实现管理线程的呢?
用户态管理线程就是用户自己做线程的切换,自己管理线程的信息,操作系统无需知道线程的存在。