博客
关于我
内核线程、轻量级进程、用户线程的区别和联系
阅读量:477 次
发布时间:2019-03-07

本文共 1129 字,大约阅读时间需要 3 分钟。

内核线程与轻量级进程的对比

内核线程是运行于内核态的轻量级线程模型,其独特之处在于能够高度抽象,通常通过轻量级进程来管理。在计算机操作系统中,内核线程的调度和资源使用具有一定的特性和挑战。

内核线程特点:

  • 处理器竞争:内核线程可以在整个系统范围内与其他线程争夺处理器资源,这使得它们在多线程应用中表现出较高的竞争力。

  • 资源使用:内核线程的执行上下文和调度机制需要占用一定的内核栈空间,这与用户线程的设计目的是不同的。

  • 调度开销:内核线程的调度开销通常与普通进程相当,这意味着其性能表现需要与普通进程进行权衡。

  • 同步效率:内核线程的同步机制往往不如用户线程高效,主要体现在共享资源和数据上的同步效率问题。

  • 轻量级进程的优势:

    轻量级进程(LWP)是内核线程的直接映射,通常由clone()系统调用创建,且默认使用共享进程地址空间的策略(CLONE_VM)。这使得轻量级进程能够继承父进程的资源,并在调度机制上与普通进程持一致。

  • 处理器竞争:轻量级进程通过与特定内核线程关联,能够在系统范围内参与处理器资源的竞争。

  • 资源共享:轻量级进程与父进程共享进程地址空间,因此对系统资源的使用更加高效。

  • 调度机制:轻量级进程的调度与普通进程完全一致,可以根据需求灵活配置调度策略。

  • 用户线程的特性:

    用户线程主要由用户空间线程库实现,具备与内核无关的特点,这使得它们成为优化高并发应用的理想选择。

  • 处理器竞争:用户线程与所属进程内的其他线程共同参与处理器资源竞争,这种方式能够最大限度地利用系统资源。

  • 资源共享:用户线程与所属进程共享进程地址空间和系统资源,这降低了内核态切换的开销。

  • 调度实现:用户线程的调度完全由用户空间线程库完成,其调度策略可灵活配置,并支持多种调度模式。

  • Linux线程库的设计选择:

    Linux采用LinuxThreads作为用户线程库,灵感来源于Go语言的Goroutine模型,采用线程-进程一对一的调度方式。默认情况下,用户线程通过内核线程进行调度,例如PTHREAD_SCOPE_SYSTEM 线程范围内的调度策略。

  • 调度策略:默认的调度策略为SCHED_OTHER,适合大多数开发需求。如果需要硬实时处理,可以通过修改策略切换为SCHED_FIFO或SCHED_RR。

  • 调度优先级:支持调度优先级从0到99的设置,这为用户线程提供了更高的灵活性。

  • 管理机制:所有用户线程的管理由一个专门的管理线程负责,通过内核线程实现与用户线程的抽象。

  • 用户线程的调度策略对性能有着显著影响,选择合适的调度策略能够最大限度地提升应用程序的运行效率。而内核线程则为需要高核级调度的任务提供了基础支撑。理解这些概念有助于在开发多线程应用时做出更明智的选择。

    转载地址:http://yogdz.baihongyu.com/

    你可能感兴趣的文章
    轻松理解前后端分离(通俗易懂)
    查看>>
    JavaFX官方文档
    查看>>
    ORA-12154: TNS: 无法解析指定的连接标识符
    查看>>
    Spring学习总结(十二):Spring中的事务管理
    查看>>
    CentOS5 Linux编译PHP 报 mysql configure failed 错误解决办法
    查看>>
    G7相关
    查看>>
    Linux 激活网卡ifconfig eth1 up 和 ifup eth1 之间的差别
    查看>>
    In App Purchase Verification using PHP
    查看>>
    Mapper.xml中新增数据并返回主键ID(MYSQL)
    查看>>
    shell编程===》进程锁
    查看>>
    教你如何一招破解简单的joy.dex的卡密系统(Auto.js)
    查看>>
    Linux小操作LVM
    查看>>
    Split返回数组元素含有空字符串移除
    查看>>
    解决VS中C语言运行scanf错误
    查看>>
    Java注解
    查看>>
    idea上的程序报错-> 错误: 找不到或无法加载主类
    查看>>
    java刷题--49字母异位词分组
    查看>>
    《web安全入门》(四)前端开发基础Javascript
    查看>>
    laravel中视图模板的表单提交
    查看>>
    在Ubuntu上检查一个软件包是否安装命令
    查看>>