当前位置: 首页 > 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用于输入数据的…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...