线程实现模型

用户级线程模型

此模型下的线程是由用户级别的线程库全权管理的

线程库并不是内核的一部分,而只是存储在进程的用户空间之中,这些线程的存在在对于内核来说是无法感知的

应用程序在对线程进行创建、终止、切换或同步等操作的时候, 并不需要让CPU从用户切换到内核态

并且,由于对线程的管理完全不需要内核的参与,导致在此模型下并不能够真正并发运行

  • 例如,如果线程在I/O操作过程中被阻塞,那么其所属进程也会被阻塞
  • 这正是由线程无法被内核调度造成的

在调度器的眼里,进程是一个无法再被分割的调度单元,无论其中存在多少个线程

  • 即使计算上有多个CPU,进程中的多个线程也无法被分配给不同的CPU运行

包含了多个用户级线程的进程只与一个KSE(Kernel Scheduling Entiy, 内核调度实体)相对应,因此这种线程实现模型又称为多对一(M:1) 的线程实现

内核级线程模型

该模型下的线程是由内核负责管理的,它们是内核的一部分

应用程序对线程的创建、终止和同步都必须通过内核提供的系统调用来完成的。进程中的每一个线程都与一个KSE相对应

也就是说,内核可以分别对每一个线程进程调度。由此,内核级线程模型又称一对一(1:1)的线程实现

  • 一对一线程实现了消除了多对一线程的很多弊端,可以真正实现线程的并发

内核可以在不同的时间片内让CPU运行不同的线程。内核在极短的时间内快速切换和运行各个线程,使得它们看起来就像正在同时运行

即使进程中的一个线程由于某种原因进入到阻塞状态,其他线程也不会受到影响,这也使得内核在多个CPU上进行负载均衡变得容易和有效。

同时,内核对线程的全权接管使操作系统在库级别几乎无需为线程管理做什么事情

  • 内核线程的管理成本显然要比用户线程高出很多

如果一个进程包含了大量的线程,那么它会给内核的调度器造成非常大的负担,甚至会影响到操作系统的整体性能

两级线程模型

两级线程模型的目标是取前模型之精华,也称为多对多(M:N)的线程实现

在此模型下,一个进程可以与多个KSE相关联,这与内核级线程模型相似

但与内核级线程模型不同的是,进程中的线程并不与KSE一一对应,这些应用程序可以映射同一个已关联的KSE上

首先,实现了两级线程模型的线程库会通过操作系统内核创建多个内核级线程。然后,它会通过这些内核级线程对应用程序线程进行调度

这是这样的设计,内核资源的消耗才得以大大减少,同时也使线程管理操作的效能提高不少

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/365416.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解题思路:LeetCode 第 209 题 “Minimum Size Subarray Sum“

解题思路:LeetCode 第 209 题 “Minimum Size Subarray Sum” 在这篇博文中,我们将探讨如何使用 Swift 解决 LeetCode 第 209 题 “Minimum Size Subarray Sum”。我们会讨论两种方法:暴力法和滑动窗口法,并对这两种方法的时间复…

阿里云centos 7.9 使用宝塔面板部署.netcore 6.0

前言: 在做工作之前之前,如果你的服务器有数据盘,而且又没挂载,但是你想使用数据盘做为工作目录,建议跳转到下面这个链接先挂载数据盘,并到数据盘创建好目录,修改站点工作目录到数据盘的目录&am…

骑行十里箐:风景,挑战与心灵,在幽谷中的协奏曲

2024年6月29日,星期六,一个看似平凡的日子,却因一次不同寻常的骑行而变得难以忘怀。作为校长骑行群的一员,我有幸参加了这次骑行十里箐的活动。从滇池后海的宁静开始,到宝珠山顶的壮观落幕,这一天的旅程充满…

JFreeChart 生成Word图表

文章目录 1 思路1.1 概述1.2 支持的图表类型1.3 特性 2 准备模板3 导入依赖4 图表生成工具类 ChartWithChineseExample步骤 1: 准备字体文件步骤 2: 注册字体到FontFactory步骤 3: 设置图表具体位置的字体柱状图:饼图:折线图:完整代码&#x…

Quectel EM05-CE 模块测试

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

AI绘画:探索人工智能与艺术的奇妙结合

前言 人工智能技术的不断发展,使得AI绘画逐渐成为艺术领域的新宠。AI绘画是指利用人工智能算法进行绘画创作的一种艺术形式,它可以模拟人类艺术家的创作过程,创造出各种独特的艺术作品。 突破传统艺术的极限:AI绘画的无限可能性 …

每日一题---OJ题:分隔链表

片头 嗨!小伙伴们,大家好!今天我们一起来看看这道题----分隔链表 emmmm,这道题,看描述应该不算太难,我们一起来画一画图呗! 题目读懂了,那么如何破解这道题呢? 思路&…

探索PcapPlusPlus开源库:网络数据包处理与性能优化

文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程:2.2 多线程示例代码2.3 代码说明: 3. 程序性能进一步优化3.1 避…

linux虚拟机部署的MySQL如何使用外网访问?教你轻松使用cpolar在centos搭建内网穿透

文章目录 写在前面实现Linux的内网穿透1、官网账号注册2、在Linux部署我们自己的项目3、一键自动下载安装cpolar4、设置自己的token5、启动cpolar服务6、MySQL穿透测试 卸载方法 写在前面 相信很多小伙伴在本地搭建了一个MySQL数据库,想让其他同事或者合作者一起使…

Shell编程实战

脚本编程步骤 脚本编程一般分为以下几个步骤: 需求分析:根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等; 命令测试:将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等: 脚本编程:将测试好的命令写入到脚本文…

python实现网页自动化(自动登录需要验证的网页)

引言: python作为实现网页自动化的一个重要工具,其强大的各种封装的库使得程序运行更加简洁,只需要下载相应的库,然后调用库中的函数就可以简便的实现我们想要的网页相关操作。 正文: 我的前几篇文章写了关于初学爬虫中比较容易上手的功能,例如爬取静态网页的数据、动…

Java并发编程基础知识点

目录 Java并发编程基础知识点1、线程,进程概念及二者的关系进程相关概念线程相关概念进程与线程的关系补充小知识点: 2、线程的状态Java线程的状态:Java线程不同状态之间的切换图示 3、Java程序中如何创建线程?①、继承Thread类②…

使用Python绘制极坐标图

使用Python绘制极坐标图 极坐标图极坐标图的优点使用场景 效果代码 极坐标图 极坐标图(Polar Chart)是一种图表类型,用于显示在极坐标系中的数据。极坐标图使用圆形坐标系,角度表示一个变量的值,半径表示另一个变量的…

elk对于集群实例的日志的整合-基于logstash采集日志

说明:基于logstash采集日志 环境: 物理机192.168.31.151 一.启动2个测试实例,每5-10s随机生成一条订单日志 实例一 包位置:/home/logtest/one/log-test-0.0.1-SNAPSHOT.jar 日志位置:/docker/elastic/logstash_ingest_data/l…

“医”路赋能!实在智能签约新疆百草堂

在新疆,地域广阔、人口稀疏的特性限制了实体药店的服务覆盖面,同时《“健康中国2030”规划纲要》对医药电商模式的规范化要求,使得医药电商迎来前所未有的增长机遇,而大量的订单也带来了运营成本上升、服务时效性低的挑战。 近日&…

携程二面测开—中核

4.12 35min面试经验 自我介绍 在面试的开始,我简洁明了地进行了自我介绍,突出了我的教育背景、技能特长以及实习经历,为后续的面试内容打下了良好的基础。 实习的具体工作内容 在谈及实习经历时,我详细阐述了在实习期间所承担…

[Go 微服务] Kratos 验证码业务

文章目录 1.环境准备2.验证码服务2.1 kratos 初始化验证码服务项目2.2 使用 Protobuf 定义验证码生成接口2.3 业务逻辑代码实现 1.环境准备 protoc和protoc-gen-go插件安装和kratos工具安装 protoc下载 下载二进制文件:https://github.com/protocolbuffers/protobu…

【LeetCode】 740. 删除并获得点数

这真是一道好题!这道题不仅考察了抽象思维,还考察了分析能力、化繁为简的能力,同时还有对基本功的考察。想顺利地做出这道题还挺不容易!我倒在了第一步与第二步:抽象思维和化繁为简。题目的要求稍微复杂一些&#xff0…

CSS 背景添加白色小圆点样式

css也是开发过程中不可忽视的技巧 此专栏用来纪录不常见优化页面样式的css代码 效果图: 未添加之前: 代码: background: radial-gradient(circle at 1px 1px, #3d3c3c 2px, transparent 0);background-size: 20px 25px;

【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF

【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF 前言一、Stirling-PDF介绍1.1 Stirling-PDF简介1.2 Stirling-PDF功能 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…