线程实现的两种方式 —— 用户空间和内核中

在用户空间中实现线程
特点:
整个线程包放入用户空间中,内核对线程包一无所知。从内核角度考虑,就是按正常的方式管理,即单线程进程
优点:
1、用户级线程包可以在不支持线程的操作系统上实现
2、线程切换比内核快更多
3、允许每个进程有自己定制的调度算法

缺点:
线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程
一个单独的进程内部,没有时钟中断,所以不可能用轮转调度的方式调度线程

在内核中实现线程
特点:
当某个线程希望创建一个新线程或撤销一个已有线程时,它进行一个系统调用,这个系统调用通过对线程的更新完成线程创建或撤销工作
优点:
1、所有能够阻塞线程的调用都以系统调用的形式实现
2、如果某个线程引起了页面故障,内核可以很方便地检查该进程是否有任何其他可运行的线程


混合实现
结合以上两种实现的优点
第一种方法:使用内核级线程,然后将用户级线程与某些或全部内核线程多路复用,如下图



内核只识别内核级线程,并对其进行调度,一些内核级线程会被多个用户级多路复用,可以创建、撤销和调度这些用户级线程,每个内核级线程有一个可以轮流使用用户级线程集合
---------------------
作者:在云端123
来源:CSDN
原文:https://blog.csdn.net/jyxmust/article/details/73369121
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自www.cnblogs.com/zhousong918/p/10842954.html