• 用户级线程和内核级线程


    据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程。用户级线程由应用程序所支持的线程实现, 内核意识不到用户级线程的实现。内核级线程又称为内核支持的线程。

    用户级线程

    用户级线程仅存在于用户空间中,对于操作系统是不可见的。此类线程的创建、撤销、线程之间的同步与通信功能,都无须利用系统调用来实现。每个线程并不具有自身的线程上下文(线程上下文保存的是线程用到的寄存器、内存中的数据等)。

    用户级线程的优点

    1. 线程切换代价的代价比内核线程少, 因为保存线程状态的过程和调用程序都只是本地过程,没有上下文的切换。
    2. 允许每个进程定制自己的调度算法,线程管理(创建、销毁等)比较灵活。

    用户线程的缺点

    1. 线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程。
    2. 由于每个线程并不具有自身的线程上下文。因此就线程的同时执行而言,任意给定时刻每个进程只能够有一个线程在运行,而且只有一个处理器内核会被分配给该进程。

    内核级线程

    内核级线程的管理(建立和销毁等)是由操作系统通过系统调用完成的。内核为进程及其内部的每个线程维护上下文信息,调度也是在内核基于线程架构的基础上完成。

    内核线程驻留在内核空间,它们是内核对象。有了内核线程,每个用户线程被映射或绑定到一个内核线程。用户线程在其生命期内都会绑定到该内核线程。一旦用户线程终止,两个线程都将离开系统。这被称作”一对一”线程映射,除此之外,还有多对一,多对多的线程映射。

    内核级线程的优点

    1. 多处理器系统中,内核能够并行执行同一进程内的多个线程。
    2. 如果进程中的一个线程被阻塞,能够切换同一进程内的其他线程继续执行。

    内核级线程的缺点

    1. 即使CPU在同一个进程的多个线程之间切换,也需要陷入内核,因此其速度和效率不如用户级线程。
  • 相关阅读:
    C++ 24 之 拷贝构造函数
    leetcode698. 划分为k个相等的子集
    JavaScript:js基础2
    幼儿安全消防知识教案
    MyCat2之MOD_HASH算法
    vue的常用指令
    初识网络编程
    如何封装axios请求。统一基地址、加载遮罩层、响应参数优化
    软考高级架构师下篇-17安全架构设计理论与实践
    Vue——element-UI框架、JSON Web Tokens、样式穿透
  • 原文地址:https://blog.csdn.net/TABE_/article/details/126394402