线程的实现方式

用户线程

管理线程的线程表TCB放在用户空间维护,操作系统是不直接参与的,⽽是由一组用户级别的线程库函数来完成线程的管理,包括线程的创建、终⽌、同步和调度等
在这里插入图片描述
优点:

  1. 可⽤于不⽀持线程技术的操作系统
  2. 不需要陷入内核,不需要上下文切换
  3. 允许每个进程有自己的定制调度算法

缺点:

  1. 由于操作系统不参与线程的调度,如果一个线程发起系统调用而阻塞,那进程所包含的用户线程就都 不能执行
  2. 如果一个线程开始运行,那么该进程中的其他线程就不能运行,因为系统的调度单位是进程
  3. 由于时间片的分配给进程,故与其他进程比,在多线程执行时,每个线程得到的时间片比较少,执行会比较慢

内核线程

管理线程的线程表TCB放在内核空间维护,线程的管理由操作系统负责
在这里插入图片描述
优点:

  1. 在一个进程中,如果某个内核线程发起系统调用而被阻塞,并不会影响其他内核线程的运行
  2. 分配给线程,多线程可以获得更多的CPU运行时间

缺点:
线程的创建、终止和切换都是通过系统调用来完成,系统开销大

轻量级进程(LightWeight Process)

由内核来支用户线程,一个进程可有一个或多个轻量级进程,每个量级进程由一个单独的内核线程来支持。 (Salaris/Linux)
在这里插入图片描述
1 : 1 模式
⼀个线程对应到⼀个 LWP 再对应到⼀个内核线程
优点:实现并⾏,当⼀个 LWP 阻塞,不会影响其他 LWP;
缺点:每⼀个⽤户线程,就产⽣⼀个内核线程,创建线程的开销较⼤
N : 1 模式
多个⽤户线程对应⼀个 LWP 再对应⼀个内核线程
优点:⽤户线程要开⼏个都没问题,且上下⽂切换发⽣在⽤户空间,切换的效率较⾼
缺点:⼀个⽤户线程如果阻塞了,则整个进程都将会阻塞,另外在多核 CPU 中,没办法充分利⽤ CPU
M : N 模式
多个⽤户线程对应到多 个 LWP,LWP 再⼀⼀对应到内核线程
综合了前两种优点,⼤部分的线程上下⽂发⽣在⽤户空间,且多个线程⼜可以充分利⽤多核CPU 的资源。
Linux的实现相对简单,采用1:1模式,Salaris采用M:N模式,实现相对复杂(待核实),有知道的可以下面评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值