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


    线程模型

    一对一线程模型

    在这里插入图片描述

    多对一的线程模型

    在这里插入图片描述

    N对M的线程模型

    在这里插入图片描述

    线程的两种实现方式

    用户级线程

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

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

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

    内核级线程

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

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

    协程

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

  • 相关阅读:
    SVN下载上传文件
    PDF转HTML转换器哪个好用?快看看这里
    Runtime——KVC,KVO原理
    Kmeans特征降维方法
    Docker学习笔记
    配有 1TB 驱动器的 Surface Pro 5 设备显示两个驱动器
    学习笔记17--汽车运动控制理论之现代控制理论
    string·模拟实现
    JavaScript API 获取当前地理位置
    下划线命名转驼峰
  • 原文地址:https://blog.csdn.net/KingOfMyHeart/article/details/125475937