• 关于用户级线程和内核级线程的搜集和理解


    1.内核级线程:

    (1)线程的创建、撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调度实体的线程。
    (2)这些线程可以在全系统内进行资源的竞争。
    (3)内核空间内为每一个内核支持线程设置了一个线程控制块(TCB),内核根据该控制块,感知线程的存在,并进行控制。
    在一定程度上类似于进程,只是创建、调度的开销要比进程小。有的统计是1:10

    2.用户级线程:

    (1)用户级线程仅存在于用户空间。——>对比内核(3)
    (2)内核并不能看到用户线程。——>重要的区别
    (3)内核资源的分配仍然是按照进程进行分配的;各个用户线程只能在进程内进行资源竞争。

     

    posix线程调度是一个混合模型,很灵活,足以在标准的特定实现中支持用户级和内核级的线程。模型中包括两级调度--线程及和内核实体级。线程级与用户级线程类似,内核实体由内核调度。由线程库来决定它需要多少内核实体,以及他们是如何映射的。

    POSIX 引入了一个线程调度竞争范围(thread-scheduling contention scope)的概念,这个. 概念赋予了程序员一些控制权,使它们可以控制怎样将内核实体映射为线程。线程的contentionscope属性可是PTHREAD_SCOPE_PROCESS,也可以是PTHREAD_SCOPE_SYSTEM。带有PTHREAD_SCOPE_PROCESS属性的线程与它所在的进程中的其他线程竞争处理器资源。带有PTHREAD_SCOPE_SYSTEM属性的线程很像内核级线程,他们在全系统的范围内竞争处理器资源。POSIX的一种映射方式将PTHREAD_SCOPE_SYSTEM线程和内核实体之间绑定起来。



    内核级线程是操作系统内核实现、管理和调度的一种线程。由于有操作系统管理,所以操作系统是知道线程的存在,并为其安排时间片,管理与其有关的内核对象。因为内核级线程是由内核来管理,所以每次线程创建、切换都要执行一个模式切换例程,所以内核级线程效率比较低,而且内核级线程的调度是由操作系统的设计者来决定的,所以缺乏灵活性。但是内核级线程有一个有点就是当一个进程的某个线程因为一个系统调用或者缺页中断而阻塞时,不会导致该进程的所有线程阻塞。
    
    内核级线程的优点:   较好的并行能力,一个进程内的线程阻塞不会影响该进程内的其他线程
    内核级线程的缺点:  线程管理的开销过大,缺乏灵活性。
    
    用户级线程是通过运行在用户态的运行时库来管理的,其优点是,线程的一切(包括调度、创建)都可以完全由用户自己决定,所以具有较高的灵活性。而且由于是在用户态上进行管理,所以就省去了内核管理的开销,所以具有高效率。 但是用户级线程有一个致命的缺点:一个进程内的某一个线程阻塞将导致整个进程内的所有线程全部阻塞。而且由于用户级线程没有时间片概念,所以每个线程必须运行一段时间后将CPU让个其他的线程使用,否则,该线程将独占CPU。
    
    用户级线程的优点: 有较高的灵活性和高效率
    用户级线程的缺点: 较差并发能力
    
    由于两种线程通常都不能满足用户的需要,所以一些研究者开始研究新型的线程系统,比较好的线程系统是1993年几个国外的研究者提出的  调度程序激活机制的线程实现方法。
    
    这种方法是介于内核级线程和用户级线程之间的一种线程,同时具有两种线程的优点。

  • 相关阅读:
    java数组
    python中的换行与不换行
    金融业务知识2---资金的时间价值与跨时期优化
    金融业务知识1---金融和金融系统
    你真的理解正向代理和反向代理吗?
    webpack(9)plugin插件功能的使用
    webpack(8)vue组件化开发的演变过程
    webpack(7)webpack使用vue配置
    webpack(6)webpack处理图片
    webpack(5)webpack处理css文件
  • 原文地址:https://www.cnblogs.com/slz-coder150315/p/4376387.html
Copyright © 2020-2023  润新知