用户线程和核心线程

用户线程和核心线程
https://www.cnblogs.com/FengZeng666/p/14219477.html#SGZR3
https://cloud.tencent.com/developer/article/1839593
https://zhuanlan.zhihu.com/p/410266069
用户线程
由对应的程序运行库创建的线程,堆和栈分配处于用户态空间,操作系统对此无感的线程。所以操作系统对此的感知是一个进程而已,即使有多核的cpu,也只能利用其中之一而已。
核心线程
属于核心态下创建的线程,堆和栈的分配都处于核心态空间,操作系统可以感知。在Linux下相当于lwp轻量级进程。操作系统可以进行调度。

用户线程和核心线程的关系
用户线程存在多线程中,如果存在线程发送阻塞,该进程中其他的线程,由于无法感知到用户态的线程,会同等的阻塞其他的线程,无法充分利用cpu。所以将用户线程映射到核心线程中,当用户线程发生阻塞的时候,就可以切换其他的用户线程完成上下文的切换。

用户线程和核心线程的关系为

  1. 1对1
  2. 多对1
  3. m对n

其中JVM和Linux使用的是1对1的线程关系,一个用户线程对应一个核心线程。这样的好处是,当发生阻塞的时候,操作系统一定能感知到,可以进行线程的调度,利用多核的cpu,坏处是随着线程的增多,核心空间分配的受限。

多对一的线程,常常不被使用,此过程依然会发生线程的阻塞问题。因为多个用户态线程,无法被感知到,所以单个核心线程对应多个用户线程,会阻塞。

m对n,设计相对复杂,可以有效地限制核心线程的数目。

职责

  1. 用户线程的创建销毁调度全是在用户态完成。
  2. 核心线程的创建销毁和调度是在核心态完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值