zoukankan      html  css  js  c++  java
  • Linux用户级线程和内核级线程区别

    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线程和内核实体之间绑定起来。

    内核级线程创建时先设置线程属性PTHREAD_SCOPE_SYSTEM,代码如下,:

    pthread_attr_t attr;

    pthread_attr_init(&attr);
    pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); //设置内核级的线程,以获取较高的响应速度
    //创建线程

    ret = pthread_create(&iAcceptThreadId, &attr, AcceptThread, NULL);

  • 相关阅读:
    Leetcode
    算法
    手写代码注意点 -- HashMap
    Batch
    Batch
    Tomcat
    微服务
    Java 基础
    Maven
    算法
  • 原文地址:https://www.cnblogs.com/jiangwang2013/p/3578980.html
Copyright © 2011-2022 走看看