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


    线程模型

    一对一线程模型

    在这里插入图片描述

    多对一的线程模型

    在这里插入图片描述

    N对M的线程模型

    在这里插入图片描述

    线程的两种实现方式

    用户级线程

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

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

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

    内核级线程

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

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

    协程

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

  • 相关阅读:
    Idea Debug断点太多 启动太慢
    三十二、《大数据项目实战之用户行为分析》Spark SQL操作Hive的几种方式
    手动实现简单限流函数
    docker安装apisix全教程包含windows和linux
    SQL语句的约束 总结
    Mysqld之MHA高可用
    智能合约概述
    Lyx使用对中文进行编译
    Himall商城文件帮助类IOHelper(2)
    Vulkan 简介
  • 原文地址:https://blog.csdn.net/KingOfMyHeart/article/details/125475937