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


    线程模型

    一对一线程模型

    在这里插入图片描述

    多对一的线程模型

    在这里插入图片描述

    N对M的线程模型

    在这里插入图片描述

    线程的两种实现方式

    用户级线程

    实现在用户态的线程实例,用一个TCB(Thread Control Block)来描述一个用户线程,该TCB存放在用户态。

    1. 内核看不到用户级线程,对于内核来讲,只能看到当前的进程,在当前进程中创建的线程无法被操作系统调度;
    2. 用户级线程的创建,销毁,以及切换都是特别快的,不需要用户态和内核态来回切换;
    3. 当一个用户线程阻塞或者陷入内核,那么当前整个进程都会阻塞,其他的用户线程也将不能使用(可以考虑使用异步调用缓解);
    4. 进程中的所有用户线程需要主动让出CPU,否则一次性将CPU时间片耗完,因为对于内核来讲,只能看到进程,只能将时间片分配给当前进程;
    5. 每个进程可以自定义线程调度算法。

    用户级线程是由一些应用程序中的线程库实现。

    内核级线程

    实现在内核态的线程实例,用一个TCB(Thread Control Block)来描述一个用户线程,该TCB存放在内核态,内核可以直接进行调度管理。

    1. 线程的创建,终止以及切换开销较大,都是由内核完成;
    2. 内核能感知到线程的存在,被操作系统管理,受操作系统调度;
    3. 内核时间片的分配是以线程为单位的,内核是将一整个时间片分配给线程的。

    协程

    协程 = 用户级线程 + 调度器

  • 相关阅读:
    关闭vscode检查更新
    我的创作纪念日
    【每日知识】进制转换:二进制、八进制、十六进制
    Flink之Watermark水印、水位线
    openlayers示例教程100+【目录】
    2591. 将钱分给最多的儿童(Java)
    vue导出word文档
    ZED相机获取图像python
    【学习Docker(一)】Docker Jenkins的安装与卸载
    使用乐鑫 Web IDE 助力物联网开发
  • 原文地址:https://blog.csdn.net/KingOfMyHeart/article/details/125475937