线程的实现也就是用户线程和内核线程的区别
1、在用户空间中实现线程
- 特点:内核对线程包一无所知。从内核角度考虑,就是按正常的方式管理,即单线程进程(存在运行时系统)
- 优点: 用户级线程包可以在不支持线程的操作系统上实现。
保存线程状态的过程和调用程序都只是本地过程,故启动它们比进程内核调用效率更高。
不需要陷阱,不需要上下文切换,也不需要对内存高速缓存进行刷新,使得线程调用非常快捷。
- 缺点:线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程。
一个单独的进程内部,没有时钟中断,所以不可能用轮转调度的方式调度线程。
2、在内核中实现线程
- 特点:当某个线程希望创建一个新线程或撤销一个已有线程时,它进行一个系统调用
- 优点:所有能够阻塞线程的调用都以系统调用的形式实现,代价可观。
当一个线程阻塞时,内核根据选择可以运行另一个进程的线程,而用户空间实现的线程中,运行时系统始终运行自己进程中的线程。
说明:由于内核创建线程代价大,故有线程回收