线程的魔法:揭开现代操作系统并发执行的面纱

news2024/11/17 14:19:06


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:操作系统

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

目录

线程

线程概念

线程引入

传统进程的两个基本属性:

资源的拥有者:

调度单位

1.线程的组成

2.线程的状态

3.线程的管理

4.线程和进程的关系

5.引入线程的好处

线程的实现

1.在用户空间实现线程

在用户空间实现线程的优点

用户级线程的主要缺点

2.在内核空间实现线程

3.组合方式


线程

线程概念

现代操作系统中,进程作为资源拥有者,而调度和运行的属性赋予新的实体——线程

线程(Thread)是进程中实施调度和分派的基本单位。

线程引入

传统进程的两个基本属性:
资源的拥有者:

每个进程有自己的地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度

调度单位

进程是一个执行轨迹

以上两个属性构成进程并发执行的基础


系统管理传统进程必须完成的操作:

  • 创建进程
  • 撤消进程
  • 进程切换

缺点:负载重,时间空间开销大,限制并发度的提高

将进程的上述两个属性分开,线程因而产生。

引人进程的目的是为了使多个程序并发执行,以改善资源利用率、提高系统吞吐量。

线程的引人是为了减少程序并发执行时的所付出的时空开销。

1.线程的组成

  • 每个线程有一个thread结构,即线程控制块TCB用于保存自己私有的信息,主要由以下4个基本部分组成:

  • 线程必须在某个进程内执行
  • 一个进程可以包含一个线程或多个线程

2.线程的状态

与进程相似,线程也有若干种状态

  • 运行状态:线程在CPU上执行
  • 就绪状态:具备运行条件,一旦分到CPU,可以马上投入运行
  • 阻塞状态:线程在等待某个事件发生
  • 终止状态:线程完成任务后

线程的状态转换是在一定的条件下实现的

3.线程的管理

线程创建:调用thread_create创建新线程,建立thread结构,分配栈结构等,设置为就绪状态,放入就绪队列

线程终止:线程完成工作后,调用thread_exit终止自身

线程等待:调用thread wait等待指定线程终止此时该线程处于阻塞状态,指定线程终止时转为就绪态

线程让权:调用thread_yield放弃CPU,让给另外的线程运行

4.线程和进程的关系

  1. 一个进程可以有多个线程,但至少要有一个线程;而一个线程只能在一个进程的地址空间内活动。
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  3. 处理机分配给线程,即真正在处理机上运行的是线程。
  4. 线程在执行过程中需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
  • 由于线程拥有较少的资源,但又具有传统进程的许多特性,有的把线程叫做轻型进程(light weightprocess, LWP),
  • 把传统的进程叫做重型进程(heavy weightprocess,HWP),可把它看成拥有一个线程的进程。

5.引入线程的好处

①线程切换开销少。
②提高并发性。
③提升响应能力。
④利于充分发挥多处理器的效能。

线程的引用使系统设计变得复杂

无论是采用多进程还是一个进程的多线程来实现其并发性都是合理的,用哪一种结构更有效则取决于应用程序的要求。

线程的实现

 很多系统中已经实现线程,如Solaris2,Windows2000,Linux,Java语言

实现线程的方式主要有:

  • 在用户空间实现
  • 在核心空间实现
  • 组合方式:将用户级线程和核心级线程结合在一起,取长补短

1.在用户空间实现线程

把线程库整个地放在用户空间,内核对线程一无所知。

  

在用户空间实现线程的优点
  1.  线程切换速度很快。
  2. 调度算法可以是应用程序专用的。
  3. 用户级线程可以运行在任何操作系统上,包括不支持线程机制的操作系统。 
用户级线程的主要缺点
  1. 系统调用的阻塞问题
  2. 在单纯用户级线程方式中,多线程应用程序不具有多处理器的优点。

2.在内核空间实现线程

内核知道线程存在,并对它们实施管理。

  1. 在多处理器系统中,内核可以同时调度同一进程的多个线程
  2. 如果一个进程的某个线程阻塞了,内核可以调度同一个进程的另一个线程。
  • 优点:克服了用户级线程方式的主要缺陷;内核线程本身也可以是多线程的。
  • 主要缺点:控制转移开销大。

  

3.组合方式

把用户级线程和内核级线程两种方式结合在一起,吸收二者优点,克服各自不足

内核只知道内核级线程,也只对它们实施调度

实现组合方式有不同的模型:

  • 多对一模型
  • 一对一模型
  • 多对多模型

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebMagic框架

1.webmagic框架 webmagic框架是一个Java实现的爬虫框架,底层依然是HttpClient和jsoup 组件: downloader:下载器组件PageProcessor:页面解析组件(必须自定义)scheculer:访问队列组件pipeline&am…

跨境电商三大趋势

跨境电商有着不断发展的三大趋势: 个性化定制:随着消费者需求的不断变化和个性化定制的潮流,跨境电商平台开始提供更多的定制化服务。消费者可以根据自己的需求选择产品的款式、材料和设计,从而获得更加个性化的产品体验。 无界销…

JDBC的学习记录

JDBC就是使用java语言操作关系型数据库的一套API。 JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的一种标准接口。它提供了一组方法和类,使Java程序能够与各种不同类型的关系型数据库进行交互。 JDBC的主要功能包括建…

【notepad++工具使用之】批量加逗号

背景 在使用sql语句in关键字查询时,我们需要把数据用逗号进行隔开,在数据量非常少的时候(十几二十个这样),可以手动的去加逗号分隔符; 但是遇到1000个怎么弄呢? 强大的Notepad 批量处理数据时…

讲解Python3内置模块之json编码解码方法

简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成&#…

学习笔记docker——容器通过网络通信

inspect-a:查看Linux中的网络细节。 docker inspect 容器id/容器名:查看容器的细节。 注意:上面有误,应该是接在docker0网桥上的容器只能通过容器的ip(eth0)之间进行通信,不能通过容器名称通信,要用容器名…

git搜索历史上曾经的文本内容

文章目录 问题在命令行搜索历史内容参考 问题 我们知道,github有文本搜索功能: 比如想搜哪些文件内容包括 aaa ,在搜索框中输入 aaa : 但是,如果是历史上曾经有过的文本,这个办法貌似不行。 比如文件 tes…

Babel:现代JavaScript的桥梁

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

实时工业控制系统的创新整合:PLC4X与CnosDB的高效数据采集与存储

在当代工业自动化系统中,实时监测和数据分析变得至关重要。本文将介绍如何通过集成Apache PLC4X与CnosDB,实现对工业控制系统中的PLC设备进行高效数据采集和存储,为工程师们提供更强大的数据分析和监测工具。 PLC的定义 PLC是可编程逻辑控制…

C++_lambda表达式

目录 前言-lambda表达式的介绍: 1、lambda表达式的作用 2、lambda表达式的优势 2.1 用lambda构建lambda变量 3、lambda表达式的类型 4、捕捉列表说明 4.1 传值捕捉 4.2 mutable 4.3 传引用捕捉 4.4 混合捕捉 5、lambda的大小 结语 前言-lambda表达…

基于springboot+vue实现早餐店点餐系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现早餐店点餐系统演示 摘要 多姿多彩的世界带来了美好的生活,行业的发展也是形形色色的离不开技术的发展。作为时代进步的发展方面,信息技术至始至终都是成就行业发展的重要秘密。不论何种行业,大到国家、企业&#xff0…

基于51单片机的直流电机调速系统设计

基于51单片机的直流电机调速系统设计[proteus仿真] 电机调速系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的直流电机调速系统设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2&#xff…

【Web】浅聊Java反序列化之Rome——EqualsBeanObjectBean

目录 简介 原理分析 ToStringBean EqualsBean ObjectBean EXP ①EqualsBean直球纯享版 ②EqualsBean配合ObjectBean优化版 ③纯ObjectBean实现版 关于《浅聊Java反序列化》系列,纯是记录自己的学习历程,宥于本人水平有限,内容很水&a…

AI相关的实用工具分享

AI实用工具大赏:赋能科研与生活,探索AI的无限可能 前言 在数字化浪潮汹涌而至的今天,人工智能(AI)已经渗透到我们生活的方方面面,无论是工作还是生活,都在悄然发生改变。AI的崛起不仅为我们带…

搭建Android Studio开发环境

一、JDK 1、下载 2、安装 双击进行安装,修改安装路径为:D:\Java\jdk-17.0.4.1即可,安装完成后目录如下: 配置环境变量 3、测试 WinR,输入cmd,按Enter后,键入:java --version&…

云上攻防-云产品篇堡垒机场景JumpServer绿盟SASTeleport麒麟齐治

知识点 1、云产品-堡垒机-产品介绍&攻击事件 2、云产品-堡垒机-安全漏洞&影响产品 章节点: 云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等 云厂商攻防:阿里云,腾讯…

力扣难题:重排链表

首先通过快慢指针找到中间节点,然后将中间节点之后和之前的部分分为两个链表,然后翻转后面的链表,注意方法,然后将两个链表交替链接。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode…

【数理统计实验(三)】假设检验的R实现

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

uglityjs非集成方式混淆js代码

文章目录 uglityjs非集成方式混淆js代码一、前言1.简介2.环境3.bat和ps1.ps1 文件.bat 文件 二、正文1.安装Node.js2.安装UglityJS3.代码混淆1)单个文件2)多个文件 uglityjs非集成方式混淆js代码 一、前言 1.简介 UglifyJS 是一个 JavaScript 解析器、…

3.10复试专业课日报【周末总结】

数据结构 考点一,考点二 操作系统 计算机网络 组成原理 1.什么是中断向量 2. 数据库 选择题80-100 1.数据库的逻辑模型(数据模型) 2.DCL,DML,DQL,DDL 3.数据库特点 算法 1.复习 对称二叉树,二叉树最大深度 2.只出现一…