博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统编程——用户级线程和内核级线程区别
阅读量:4879 次
发布时间:2019-06-11

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

Linux用户级线程和内核级线程区别

线程的实现可以分为两类:用户级线程和内核级线程。

在用户级线程中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成多线程程序。

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

  • 区别
  1. 内核级线程:

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

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

  1. 用户级线程:

(1)用户级线程仅存在于用户空间。

(2)内核并不能看到用户线程。
(3)内核资源的分配仍然是按照进程进行分配的;各个用户线程只能在进程内进行资源竞争

  • 多线程模型:

1600805-20190421145156922-2023431256.png

1、多对一模型

将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。用户级线程对操作系统不可见(透明)。

优点:线程管理是在用户空间进行的,因而效率比较高

缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞。

2、一对一模型

将每个用户级线程映射到一个内核级线程。

优点:当一个线程被阻塞时,允许另一个线程继续运行,并发能力强。

缺点:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能。

3、多对多模型

将n个用户级线程映射到m个内核级线程上,要求m<=n;

特点:前两者的折中。

转载于:https://www.cnblogs.com/Mered1th/p/10745137.html

你可能感兴趣的文章
navigationController pop回之前控制器
查看>>
汇编语言实验一
查看>>
Web.config配置文件详解(新手必看)
查看>>
selenide总结
查看>>
selenium--控制浏览器和简单元素操作
查看>>
[笔记] imooc《JavaScript深入浅出》对象与函数
查看>>
hdu1078FatMouse and Cheese
查看>>
简单通用线程池的实现
查看>>
长序列处理
查看>>
Java环境----JDK开发环境搭建及环境变量配置
查看>>
$(selector).each() 和$each() 的区别
查看>>
【转】Objective-C Class Dump
查看>>
[转]Rails 3 | Bundler浅尝
查看>>
湖南集训day5
查看>>
使用flask_socketio实现客户端间即时通信
查看>>
android spannableString 替换 textview 中部分文字
查看>>
java 引用
查看>>
关于Spring注解@Async引发其他注解失效
查看>>
关于学习的一些感悟
查看>>
算法提高 概率计算
查看>>