精华内容
下载资源
问答
  • 内核支持线程和用户级线程

    千次阅读 2017-12-21 09:54:59
    1、内核支持线程  对于通常的进程,无论是系统进程还是用户进程,进程的创建、撤销,以及要求由系统设备完成的i/o操作,都是利用系统调用而进入内核,再由内核中的相应处理程予以完成的。进程的切换同样是在内核...

    1、内核支持性线程

      对于通常的进程,无论是系统进程还是用户进程,进程的创建、撤销,以及要求由系统设备完成的i/o操作,都是利用系统调用而进入内核,再由内核中的相应处理程予以完成的。进程的切换同样是在内核的支持下实现的。因此我们说,不论什么进程,它们都是在操作系统内核的支持下运次的,是与内核紧密相关的。

      这种线程实现方式主要有四个优点:

    1)、在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行;

    2)、如果进程中的一个线程被阻塞了,内核可以调度该进程中的其他线程占用处理器运行,也可以运行其他进程中的线程;

    3)、内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;

    4)、内核本身也可以采用多线程技术,可以提高系统的执行速度和效率。

    缺点:

    内核支持线程的主要缺点是:对于用户的线程切换而言,其模式切换开销大,在同一个进程中,从一个线程切换到另一个线程时,需要从用户态转到内核态进行,这是因为用户进程在用户态运行,而线程调度和管理是在内核实现的,系统开销大。


    2、用户级线程

    用户级线程仅存于用户空间中。对于这种线程的创建、撤销、线程之间的同步与通信等功能,都无须利用系统调用来实现。对于用户级线程的切换,通常发生在一个应用程序的诸多线程之间。由于切换的规则远比进程的调度和切换的规则简单,因此使线程线程的切换速度特备快。可见,这种线程是与内核无关的。

     使用用户级线程方式的优点:

    1)、线程的切换不需要装换到内核空间;

    2)、调度算法可以是进程专用的;

    缺点:

    1)、当执行一个系统调用时,不仅该线程被阻塞,而且进程内的所有线程都会被阻塞;

    2)、在该线程放弃CPU之前,其他线程只能等待。


    3、组合方式

    不论是进程还是线程,都必须直接或间接取得内核的支持。由于内核支持线程可以直接利用的系统调用为它服务,故线程的控制相当简单;而用户线程必须借助于某种形式的中间系统的帮助才能取得内核的服务,故在对线程的控制上稍微复杂一些。

    实际上,在不同的操作系统中,实现用户级线程于内核控制线程的连接有三种不同的模型:一对一模型、多对一模型、多对多模型。

    1)、一对一模型

    为每一个用户线程都设置一个内核控制线程与之连接,当一个线程阻塞时,允许调度另一个线程运行。在多处理系统中,则有多个线程并行执行。

    2)、多对一模型

    该模型是将多个用户线程映射带一个内核控制进程,为了管理方便,这些用户进程一般属于一个进程,运行在该进程的用户空间,才对这些线程的调度和管理也是在该进程的用户空间中完成。当用户线程需要访问内核时,才将其映射到一个内核控制线程上,但每次只允许一个线程进行映射。

    3)、多对多模型

    将多个用户线程映射到多个内核控制线程,内核控制线程的数目可以根据应用进程和系统的不同而变化,可以比用户线程少,也可以与之相同。

    展开全文
  • 内核支持线程(Kernel Supported threads)KST  OS中的所有进程(用户和内核)都是依靠内核完成的。KST也是如此,它的创建,阻塞,撤销,切换都是在内核空间实现。  优点:  内核可以同时调度同一进程中的...
    • 内核支持线程(Kernel Supported threads)KST
      •   OS中的所有进程(用户和内核)都是依靠内核完成的。KST也是如此,它的创建,阻塞,撤销,切换都是在内核空间实现。
      •   优点:
        •   内核可以同时调度同一进程中的多个线程并行执行
        •   一个线程被阻塞了,内核可以调度随便一个进程中的其他线程占用处理器
        •   采用多线程技术,可以提高西永的执行速度
    • 用户级线程ULT
      •   在用户空间实现,它的创建,阻塞,撤销,切换都无需内核的支持--》用户级线程与内核无关。所以内核完全不知道用户级线程的存在,也就不能看到用户线程
      •   对于设置了用户级线程的系统,调度是以进程为单位的;而设置了内核支持线程的系统是以线程为单位的。
      •   优点
        •   线程切换不用转换到内核中,
        •   实现与OS平台无关
      •   缺点
        •   阻塞问题。大多数的系统调用使进程阻塞,当一个线程系统调用的时候会发生阻塞,导致其他线程也发生阻塞
        •   只能单一实现。

    转载于:https://www.cnblogs.com/Kobe10/p/5724637.html

    展开全文
  • 用户级线程内核线程的区别

    千次阅读 2019-03-28 15:29:37
    用户级线程和内核级线程的区别用户线程优点:缺点:内核级线程优点:缺点:关联性 线程的实现可以分两类:用户级线程,内核级线程和混合式线程。 用户线程 用户级线程是指不需要内核支持而在用户程序中实现的线程,...


    线程的实现可以分两类:用户级线程,内核级线程和混合式线程。

    用户线程

    用户级线程是指不需要内核支持而在用户程序中实现的线程,它的内核的切换是由用户态程序自己控制内核的切换,不需要内核的干涉。但是它不能像内核级线程一样更好的运用多核CPU。

    优点

    (1) 线程的调度不需要内核直接参与,控制简单。

    (2) 可以在不支持线程的操作系统中实现。

    (3) 同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起,可以节约更多的系统资源。

    缺点

    (1) 一个用户级线程的阻塞将会引起整个进程的阻塞。

    (2) 用户级线程不能利用系统的多重处理,仅有一个用户级线程可以被执行。

    内核级线程

    切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态。可以很好的运用多核CPU,就像Windows电脑的四核八线程,双核四线程一样。

    优点

    (1)当有多个处理机时,一个进程的多个线程可以同时执行。

    (2) 由于内核级线程只有很小的数据结构和堆栈,切换速度快,当然它本身也可以用多线程技术实现,提高系统的运行速率。

    缺点

    (1) 线程在用户态的运行,而线程的调度和管理在内核实现,在控制权从一个线程传送到另一个线程需要用户态到内核态再到用户态的模式切换,比较占用系统资源。(就是必须要受到内核的监控)

    关联性

    (1) 它们之间的差别在于性能。

    (2) 内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。

    (3) 用户级线程的创建、撤消和调度不需要OS内核的支持。

    (4) 用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。

    (5) 在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。

    (6) 用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。

    来源

    知乎:逸帆

    展开全文
  • 有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在. 应用程序可以通过使用线程库设计成多线程程序. 通常,应用程序从单线程起始,在该线程中开始运行,在其运行的任何时刻,可以通过调用线程库中的...

    用户级线程

    有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在. 应用程序可以通过使用线程库设计成多线程程序. 通常,应用程序从单线程起始,在该线程中开始运行,在其运行的任何时刻,可以通过调用线程库中的派生例程创建一个在相同进程中运行的新线程。

    用户级线程仅存在于用户空间中,此类线程的创建、撤销、线程之间的同步与通信功能,都无须利用系统调用来实现。用户进程利用线程库来控制用户线程。由于线程在进程内切换的规则远比进程调度和切换的规则简单,不需要用户态/核心态切换,所以切换速度快。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少为了在操作系统中加入线程支持,采用了在用户空间增加运行库来实现线程,这些运行库被称为“线程包”,用户线程是不能被操作系统所感知的。用户线程多见于一些历史悠久的操作系统,例如Unix操作系统

    用户级线程驻留在用户空间或模式。运行时库管理这些线程,它也位于用户空间。它们对于操作系统是不可见的,因此无法被调度到处理器内核。每个线程并不具有自身的线程上下文。因此,就线程的同时执行而言,任意给定时刻每个进程只能够有一个线程在运行,而且只有一个处理器内核会被分配给该进程。对于一个进程,可能有成千上万个用户级线程,但是它们对系统资源没有影响。运行时库调度并分派这些线程。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tFsyU0IC-1588062428559)(leanote://file/getImage?fileId=5ea7e307e32aa811e1000001)]

    用户线程的优点

    • 可以在不支持线程的操作系统中实现。

    • 创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多, 因为保存线程状态的过程和调用程序都只是本地过程

    • 允许每个进程定制自己的调度算法,线程管理比较灵活。这就是必须自己写管理程序,与内核线程的区别

    • 线程能够利用的表空间和堆栈空间比内核级线程多

    • 不需要陷阱,不需要上下文切换,也不需要对内存高速缓存进行刷新,使得线程调用非常快捷

    线程的调度不需要内核直接参与,控制简单。

    用户线程的缺点

    • 线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程, 因此同一进程中只能同时有一个线程在运行

    • 页面失效也会产生类似的问题。

    • 一个单独的进程内部,没有时钟中断,所以不可能用轮转调度的方式调度线程

    • 资源调度按照进程进行,多个处理机下,同一个进程中的线程只能在同一个处理机下分时复用

    补充
    在用户级线程中,每个进程里的线程表由运行时系统管理。当一个线程转换到就绪状态或阻塞状态时,在该线程表中存放重新启动该线程所需的信息,与内核在进程表中存放的进程的信息完全一样

    内核级线程

    内核线程建立和销毁都是由操作系统负责、通过系统调用完成的。在内核的支持下运行,无论是用户进程的线程,或者是系统进程的线程,他们的创建、撤销、切换都是依靠内核实现的。

    线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口. 内核为进程及其内部的每个线程维护上下文信息,调度也是在内核基于线程架构的基础上完成

    内核线程驻留在内核空间,它们是内核对象。有了内核线程,每个用户线程被映射或绑定到一个内核线程。用户线程在其生命期内都会绑定到该内核线程。一旦用户线程终止,两个线程都将离开系统。这被称作”一对一”线程映射,

    线程的创建、撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调度实体的线程

    这些线程可以在全系统内进行资源的竞争

    内核空间内为每一个内核支持线程设置了一个线程控制块(TCB),内核根据该控制块,感知线程的存在,并进行控制

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJ7uJVNT-1588062428565)(leanote://file/getImage?fileId=5ea7e3f1e32aa811e1000002)]

    内核线程的优点:

    • 多处理器系统中,内核能够并行执行同一进程内的多个线程

    • 如果进程中的一个线程被阻塞,能够切换同一进程内的其他线程继续执行(用户级线程的一个缺点)

    • 所有能够阻塞线程的调用都以系统调用的形式实现,代价可观

    • 当一个线程阻塞时,内核根据选择可以运行另一个进程的线程,而用户空间实现的线程中,运行时系统始终运行自己进程中的线程

    • 信号是发给进程而不是线程的,当一个信号到达时,应该由哪一个线程处理它?线程可以“注册”它们感兴趣的信号

    Java线程类型

    测试:

    package com.liaojl.test.concurrent;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.concurrent.*;
    
    /**
     * @author LiaoJL
     * @description TODO
     * @file Test4.java
     * @email jinlongliao@foxmail.com
     * @date 2020/4/28 15:09
     */
    public class Test4 {
        private static final Logger log = LoggerFactory.getLogger(Test4.class);
    
        private ThreadPoolExecutor threadPoolExecutorLink = new ThreadPoolExecutor(
                1000,
                10002,
                2, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
        private ThreadPoolExecutor threadPoolExecutor = null;
    
        @Before
        public void before() {
            threadPoolExecutor = threadPoolExecutorLink;
        }
    
        @Test
        public void threadPoolExecutor1() throws InterruptedException {
            for (int i = 0; i < 100000; i++) {
                threadPoolExecutor.execute(() -> {
                    log.info("线程:{}", Thread.currentThread().getId());
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        log.error(e.getMessage(), e);
                    }
                });
            }
            Thread.sleep(10000);
        }
    }
    
    

    测试前:
    在这里插入图片描述

    测试中:
    在这里插入图片描述

    线程可以被操作系统感知,故Java的线程类型为内核级

    展开全文
  • 线程分为用户级线程内核线程。 用户级线程是由用户空间的线程库实现的,管理线程的数据结构都在用户空间。 用户级线程不被内核所感知,即内核不知道用户级线程的存在。所以不能实现真正的并行。 内核级...
  • 内核线程

    2016-11-02 22:11:11
    【摘要】本文首先介绍了进程和线程的区别,接着分析了内核线程、轻量级LWP线程以及常见的用户线程的特点,同时介绍了内核线程和进程的区别。分析了创建内核线程kernel_thread函数的实现过程,介绍了一个在驱动中使用...
  • 内核线程与用户级线程

    千次阅读 2014-09-01 09:54:45
    这两天在写这篇blog的时候,顺带复习操作系统的资料,遇到了一个之前没有弄明白的问题,就是关于内核线程与用户级线程。在查阅了一些资料之后,发表一下我个人简介。 线程已经在许多系统中实现,到那时各个操作...
  • 之前降解过内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程), 但是一直对其中提到的线程的实现模型比较迷惑, 这次就花了点时间怎么学习了一下子1 线程的3种实现方式在传统的操作系统中,拥有...
  • Thread),后者又称为内核支持线程或轻量级进程。在多线程操作系统中,各个系统的实现方式并不相同,在linux系统中实现了用户级线程,windows系统中实现了内核级线程。内核级线程:切换由内核控制,当线程进行切换...
  • 在多线程操作系统中,各个系统的实现方式并不相同。在有的系统中实现了用户级线程,有的系统中...(3)内核空间内为每一个内核支持线程设置了一个线程控制块(TCB),内核根据该控制块,感知线程的存在,并进行控制。
  • 1、用户级线程包可以在不支持线程的操作系统上实现。 2、线程切换至少要比陷入内核要快一个数量级。在线程完成运行时,它调用thread_yield可以把该线程的信息保存在线程表中;进而,它可以调用线程调度程序
  • Linux 用户级线程内核线程

    千次阅读 2019-08-22 21:21:12
    2、内核线程(KST,Kernel Supported threads) 3、三种实现模型/组合方式 (1) 多对一(用户级或应用程序级线程) (2) 一对一(内核线程) (3) 多对多(用户级和内核级混合线程) (4) 三种实现模型/组合方....
  • 根据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程。... 内核级线程又称为内核支持线程 在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中...
  • 内核线程(KLT)和用户级线程(ULT) tags: KLT ULT 内核线程 用户级线程 引言:本文涉及到操作系统的内核模式和用户模式,如果不太懂的话,可以参看我的这篇文章内核模式和用户模式,其中简单的进行了...
  • 内核线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。 用户级线程内核的切换由用户态程序自己...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,401
精华内容 16,560
关键字:

内核支持线程的优点