当前位置: 首页 > news >正文

线程及实现方式

一、线程 

        线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。

  1. 线程是处理机调度的单位: 是的,线程是调度的基本单位。在多CPU计算机中,不同线程可以被调度到不同的CPU核上并行执行,这提高了并发性能。

  2. 线程可占用不同的CPU: 正确。在多CPU系统中,不同线程可以并行在不同的CPU核上执行。

  3. 每个线程都有一个线程控制块(TCB): 是的,线程控制块是操作系统用来管理和维护线程状态的数据结构。

  4. 线程有就绪、阻塞、运行三种基本状态: 是的,这是描述线程在操作系统中可能处于的基本状态。

  5. 线程几乎不拥有系统资源: 这取决于线程的类型。用户级线程(User-Level Threads)通常几乎不拥有系统资源,而内核级线程(Kernel-Level Threads)由操作系统内核管理系统资源。

  6. 同一进程的不同线程间共享进程的资源: 是的,同一进程内的线程通常共享进程的资源,因为它们拥有相同的地址空间。

  7. 同一进程中的线程间通信无需系统干预: 这取决于线程间通信的方式。在共享内存模型中,线程间通信确实无需系统干预。然而,在其他通信方式(如消息传递)中可能需要系统协助。

  8. 同一进程中的线程切换不会引起进程切换: 是的,线程切换通常开销较小,因为同一进程内的线程共享相同的地址空间和其他资源。

  9. 不同进程中的线程切换会引起进程切换: 是的,不同进程的线程切换涉及到不同的地址空间和资源,通常会引起较大的开销,因为这实际上是进程切换。

二 、线程实现方式

1. 用户级线程

用户级线程(User-Level Threads)是一种线程模型,其中线程的创建、调度和管理完全由用户空间的应用程序或用户级线程库负责,而不涉及操作系统内核。这与内核级线程(Kernel-Level Threads)相对,后者的创建和管理需要操作系统的支持。

以下是用户级线程的一些特点:

  1. 轻量级: 用户级线程是轻量级的,因为它们的创建和切换不需要系统调用,而是由用户级线程库直接控制。

  2. 快速切换: 由于用户级线程的切换是在用户空间完成的,因此切换的开销通常比内核级线程低。这对于某些需要高度并发和快速响应的应用程序很有优势。

  3. 无需系统调用: 用户级线程的创建、调度和销毁不需要系统调用,这意味着应用程序可以更自由地控制线程的行为,而不受操作系统的限制。

  4. 无法利用多核: 由于用户级线程的调度由用户空间的线程库负责,它们通常无法充分利用多核处理器。如果一个用户级线程阻塞,整个进程的执行也可能受到影响(它们的调用也是cpu对进程的调度,即进程是最小的调度单位)

  5. 不受操作系统调度策略影响: 用户级线程的调度完全由应用程序控制,不受操作系统的调度策略的影响。这可能导致一些问题,例如用户级线程的阻塞可能导致整个进程的阻塞。

  6. 需要处理同步问题: 由于用户级线程是由用户空间的线程库管理的,它们之间的同步问题通常需要由应用程序自己来处理,而不是依赖于操作系统提供的同步机制。

用户级线程通常在特定应用程序的上下文中使用,对于需要高度优化、灵活性较大的应用程序可能会选择使用用户级线程。然而,它们也有一些限制,例如不能充分利用多核处理器以及在面对 I/O 操作时可能导致整个进程的阻塞等

2. 内核级线程

内核级线程(Kernel-Level Threads)是由操作系统内核直接支持和管理的线程。与用户级线程相对,内核级线程不是由用户空间的线程库进行管理,而是直接由操作系统内核负责。这意味着内核级线程在操作系统的层次结构中更加底层,与操作系统内核的调度和管理机制密切相关。

以下是内核级线程的一些特点:

  1. 由内核管理: 内核级线程的创建、调度、撤销等操作完全由操作系统内核负责,不需要用户空间的线程库的干预。

  2. 更重量级: 与用户级线程相比,内核级线程通常更重量级,因为它们涉及到更多的内核资源和更复杂的上下文切换。

  3. 更高的并发性: 内核级线程能够更好地利用多核处理器,因为内核可以独立地将不同的线程调度到不同的处理器核上运行。

  4. 适用于多核系统: 由于内核级线程能够更好地利用多核系统,它们通常在需要更高并发性的情况下更为合适。

  5. 对同步和互斥的支持: 内核级线程能够充分利用操作系统提供的同步和互斥机制,因为这些机制通常是在内核中实现的。

  6. 阻塞不影响整个进程: 内核级线程的阻塞不会导致整个进程的阻塞。如果一个内核级线程阻塞,其他内核级线程仍然可以继续执行。

  7. 上下文切换开销相对较高: 由于内核级线程的上下文切换涉及到更多的内核资源,因此它们的上下文切换开销相对较高。

总体而言,内核级线程适用于需要更高度并发性、更好地利用多核处理器的场景。然而,由于其较重的开销,对于一些轻量级任务,用户级线程可能更为合适。不同的应用场景和性能需求可能决定了选择哪种线程模型。

3. 多线程模型 

 

线程的组织和控制 

 

相关文章:

线程及实现方式

一、线程 线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务&#x…...

2023年11月10日 Go生态洞察:十四年Go的成长之路

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

OpenSSL 编程指南

目录 前言初始化SSL库创建SSL 上下文接口(SSL_CTX)安装证书和私钥加载证书(客户端/服务端证书)加载私钥/公钥加载CA证书设置对端证书验证例1 SSL服务端安装证书例2 客户端安装证书创建和安装SSL结构建立TCP/IP连接客户端创建socket服务端创建连接创建SSL结构中的BIOSSL握手服务…...

js优化技巧

一、使用箭头函数简化函数定义 function add(a,b){return a b; }//箭头函数 const add (a,b) > a b;二、使用解构赋值简化变量声明 const firstName person.firstName; const lastName person.lastName;//解构赋值 const {firstName,lastName} person三、使用模板字…...

深入探索 Java 反射机制

文章目录 什么是 Java 反射?反射的核心类和接口反射的基本用法获取 Class 对象的三种方式创建对象实例访问字段和方法调用构造方法 反射的使用场景注意事项结语 Java反射(Reflection)是指在运行时获取类的信息,特别是获取其属性、…...

【ArcGIS Pro微课1000例】0054:Pro3.0创建数据库(文件数据库、移动数据库、企业级数据库)解读

文章目录 一、三种类型数据库解读二、三种类型数据库创建1. 文件数据库2. 移动数据库3. 企业级数据库三、注意事项一、三种类型数据库解读 ArcGIS Pro中主要有三种数据库类型,它们分别是:文件地理数据库、移动地理数据库和企业级地理数据库。它们的区别如下: 存储方式:文件…...

【漏洞复现】华脉智联指挥调度平台命令执行漏洞

Nx01 产品简介 深圳市华脉智联科技有限公司,融合通信系统将公网集群系统、专网宽带集群系统、不同制式、不同频段的短波/超短波对讲、模拟/数字集群系统、办公电话系统、广播系统、集群单兵视频、视频监控系统、视频会议系统等融为一体,集成了专业的有线…...

leetcode第119场双周赛 - 2023 - 12 - 9

比赛地址 : https://leetcode.cn/contest/biweekly-contest-119/ t1 : 直接哈希表 加 暴力 统计就行了 class Solution { public:vector<int> findIntersectionValues(vector<int>& nums1, vector<int>& nums2) {unordered_map<int,int>…...

05. 函数式编程

目录 1、前言 2、什么是函数式编程 2.1、函数是一等公民 2.2、避免状态和可变数据 3、函数式编程的核心概念 3.1、高阶函数 3.2、Lambda&#xff08;匿名函数&#xff09; 3.3、递归 & 尾递归优化 3.4、functools模块 3.4.1、partial 3.4.2、reduce 3.4.3、lru_…...

Linux权限(用户角色+文件权限属性)

Linux权限 文章目录 Linux权限一.文件权限1.快速掌握修改权限的方法&#xff08;修改文件权限属性&#xff09;2.对比权限的有无&#xff0c;以及具体的体现3.修改权限的第二套方法&#xff08;修改用户角色&#xff09;4.文件类型&#xff08;Linux下一切皆文件&#xff09; 二…...

短波红外相机的原理及应用场景

短波红外 (简称SWIR&#xff0c;通常指0.9~1.7μm波长的光线) 是一种比可见光波长更长的光。这些光不能通过“肉眼”看到&#xff0c;也不能用“普通相机”检测到。由于被检测物体的材料特性&#xff0c;一些在可见光下无法看到的特性&#xff0c;却能在近红外光下呈现出来&…...

【PyTorch】softmax回归

文章目录 1.理论介绍2. 代码实现2.1. 主要代码2.2. 完整代码2.3. 输出结果 3. Q&A3.1. 运行过程中出现以下警告&#xff1a;3.2. 定义的神经网络中的nn.Flatten()的作用是什么&#xff1f;3.3. num_workers有什么作用&#xff1f;它的值怎么确定&#xff1f; 1.理论介绍 背…...

12.8 作业 C++

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…...

10.机器人系统仿真(urdf集成gazebo、rviz)

目录 1 机器人系统仿真的必要性与本篇学习目的 1.1 机器人系统仿真的必要性 1.2 一些概念 URDF是 Unified Robot Description Format 的首字母缩写&#xff0c;直译为统一(标准化)机器人描述格式&#xff0c;可以以一种 XML 的方式描述机器人的部分结构&#xff0c;比如底盘…...

城市基础设施智慧路灯改造的特点

智慧城市建设稳步有序推进。作为智慧城市的基础设施&#xff0c;智能照明是智慧城市的重要组成部分&#xff0c;而叁仟智慧路灯是智慧城市理念下的新产品。随着物联网和智能控制技术的飞速发展&#xff0c;路灯被赋予了新的任务和角色。除了使道路照明智能化和节能化外&#xf…...

配置BFD多跳检测示例

BFD简介 定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网…...

爬虫学习-基础库的使用(requests)

目录 一、安装以及实例引入 &#xff08;1&#xff09;requests库下载 &#xff08;2&#xff09;实例测试 二、GET请求 &#xff08;1&#xff09;基本实例 &#xff08;2&#xff09;抓取网页 &#xff08;3&#xff09;抓取二进制数据 &#xff08;4&#xff09;添…...

4.8 构建onnx结构模型-Less

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Less 结点进行分析 方式 方法一&a…...

Java调试技巧之垃圾回收机制解析

Java作为一种高级编程语言&#xff0c;以其跨平台、面向对象、自动内存管理等特性而广受开发者的喜爱。其中&#xff0c;自动内存管理是Java的一大亮点&#xff0c;通过垃圾回收机制实现对内存的自动分配和释放&#xff0c;极大地简化了开发者的工作。本文将深入探讨Java的垃圾…...

logstash插件简单介绍

logstash插件 输入插件(input) Input&#xff1a;输入插件。 Input plugins | Logstash Reference [8.11] | Elastic 所有输入插件都支持的配置选项 SettingInput typeRequiredDefaultDescriptionadd_fieldhashNo{}添加一个字段到一个事件codeccodecNoplain用于输入数据的…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...