目录

一.线程类

1.基础线程类(Thread)

2.线程池类(Threadpool)

3.任务并行库(Task)

4.并行循环(Parallel)

二.线程池(threadPool)和Thread/Task之间的联系

1.ThreadPool和Thread的关系

2.ThreadPool和Task的关系

三.Thread和task的区别

1.抽象层次不同

2.资源消耗和效率

四.什么是操作系统资源/线程资源?

1.操作系统资源

2.线程资源

一.线程类

1.基础线程类(Thread)

Thread类:最基础的线程操作类,可以直接创建和控制单个线程。

特点:轻量级,但是创建和销毁成本比较高,适合长时间运行的任务。

使用场景:需要精细控制线程(如:优先级,长事件运行)

2.线程池类(Threadpool)

ThreadPool类:管理一个线程池,用于复用线程执行短期任务,减少线程创建销毁的开销。

特点:自动管理线程声明周期,适合大量短期任务。

使用场景:执行大量短期任务;

常用方法:

ThreadPool.QueueUserWorkItem(DoWork, "参数");
//将任务加入线程池队列
3.任务并行库(Task)

Task类:基于线程池的高级抽象,提供更灵活的任务管理和异步操作。

特点:支持任务调度,延续操作,取消机制,获取结果等功能。

Task是基于ThreadPool(或Thread)的高级封装,基本场景都适用

4.并行循环(Parallel)

Parallel类:提供简单的并行迭代功能(如:for,foreach)自动利用线程池。

Parallel.For(0, 100, i => ProcessItem(i));

二.线程池(threadPool)和Thread/Task之间的联系

1.ThreadPool和Thread的关系

1.ThreadPool是Thread的管理者

Thread是最底层的线程对象,直接对应操作系统的线程资源。而ThreadPool(线程池)是对Thread的封装和管理机制,它维护一个线程集合(“池”),当有任务需要执行时,会优先复用池中已存在的空闲线程,避免频繁创建和销毁Thread对象(这是一项昂贵的操作)。

2.threadPool对Thread的复用逻辑

当通过ThreadPool.QueueUserWorkItem()提交任务时,线程池会:

  • 若池中有空闲线程,直接分配该线程执行任务;

  • 若池中线程都在忙碌且未达最大线程数限制,会创建新的Thread加入池并执行任务;

  • 若达到最大限制,任务会进入队列等待,直到有线程空闲。

2.ThreadPool和Task的关系

1.Task是ThreadPool的高级接口

Task(任务并行库 TPL 的核心)是比ThreadPool更高层次的抽象,它默认基于ThreadPool实现(特殊情况除外,如TaskCreationOptions.LongRunning会直接创建新线程)。
简单说:Task.Run(...)new Task(...).Start()本质上是向线程池提交任务,由线程池中的Thread执行。

2.Task 对 ThreadPool 的扩展

  • ThreadPool仅提供简单的任务排队功能,而Task在此基础上增加了丰富的特性:

    • 任务返回值(Task<TResult>);

    • 任务延续(ContinueWith);

    • 取消机制(CancellationToken);

    • 异常处理(通过try/catch捕获任务内异常);

    • 父子任务关联等。

三.Thread和task的区别

1.抽象层次不同
  • Thread:是对操作系统线程的直接封装(1:1 映射),属于底层 API,直接操作线程资源。

  • Task:是基于线程池的高级抽象(.NET 4.0 引入的 TPL 任务并行库核心),不直接对应单个线程,而是表示一个 “待执行的工作单元”。

2.资源消耗和效率
  • Thread

    • 创建和销毁成本高(涉及操作系统内核对象操作)。

    • 每个Thread占用独立的栈空间(默认 1MB),大量创建可能导致内存压力。

    • 不适合频繁创建短期任务。

  • Task

  • 默认使用线程池中的线程(除非指定TaskCreationOptions.LongRunning),避免频繁创建新线程。

  • 资源消耗低,适合批量处理短期任务(如并行计算、IO 操作回调)。

  • 线程池会自动管理线程复用,效率更高

四.什么是操作系统资源/线程资源?

1.操作系统资源

指操作系统管理的所有硬件和软件资源的总称,是计算机系统运行的基础。线程本身也是操作系统资源的一种,其他常见的操作系统资源还包括:

  • 硬件资源:CPU、内存(物理内存、虚拟内存)、硬盘、网络接口、显卡等。

  • 软件资源:文件句柄(打开的文件)、网络连接(Socket)、进程、线程、互斥锁(Mutex)、信号量(Semaphore)等。

  • 操作系统通过内核(Kernel)统一管理这些资源,进程 / 线程需要通过系统调用(System Call)向内核申请或释放资源。

2.线程资源

是操作系统资源的一个子集,特指为线程运行所分配的系统资源,主要包括:

  • 线程内核对象:操作系统内核中记录线程状态的数据结构(如线程 ID、优先级、状态等)。

  • 线程栈:独立的内存区域(默认在 Windows 上为 1MB),用于存储线程执行时的局部变量、函数调用栈等。

  • 寄存器状态:CPU 寄存器中保存的线程执行上下文(如指令指针、栈指针等),用于线程切换时恢复执行状态。

简单说:一个线程(无论通过 C# 的Thread类创建,还是操作系统原生线程)本质上是操作系统分配的一组 “线程资源” 的集合

3.C#中Thread类和操作系统线程资源的关系

C# 中的Thread类是对操作系统线程资源的封装:

  • 当你创建new Thread(...)时,.NET 运行时会通过系统调用(如 Windows 的CreateThread)向操作系统申请线程资源

  • 操作系统内核会为其分配线程内核对象、栈空间等资源,并将线程加入调度队列。

  • 当调用Start()时,操作系统会调度该线程在 CPU 上执行

  • 当线程执行完毕或被销毁时,.NET 会释放对应的操作系统线程资源(归还给系统)。

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

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

相关文章

Java入门级教程16——JUC的安全并发包机制

目录 1.JUC的安全并发包机制 1.1 包含 1.2 Barrier(栅栏)机制——CyclicBarrier&#xff08;循环屏障&#xff09; 1.2.1 定义 1.2.2 特性 1.2.1 模拟包车 1.2.2 模拟学生到齐上课 1.2.3 计算任务总耗时 1.3 CountDownLatch(闭锁)机制 1.3.1 定义 1.3.2 特性 1.3.3…

【网络通信】全面解析MAC地址:网络设备的唯一标识

【网络通信】全面解析MAC地址&#xff1a;网络设备的唯一标识 文章目录【网络通信】全面解析MAC地址&#xff1a;网络设备的唯一标识前言一、MAC 地址的定义&#xff1a;设备的 “网络身份证”​二、MAC 地址的格式与组成&#xff1a;48 位的 “数字编码”​三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默认启用现代分析引擎、支持 MISRA C:2025 新规、CI构建性能提升等

Perforce Klocwork 现已更新至2025.2版本&#xff01;该版本增强了对 C/C的分析能力&#xff0c;提升了现代 C 分析的准确性&#xff0c;并改进了对源文件编码的支持。该版本还为 MISRA C:2025 标准引入了新的分类体系&#xff0c;并增强了 Visual Studio Code 插件的可用性。 …

机器人驭风而行:低空经济如何开启智能新纪元【科普类】

新晋码农一枚&#xff0c;小编会定期整理一些写的比较好的代码和知识点&#xff0c;作为自己的学习笔记&#xff0c;试着做一下批注和补充&#xff0c;转载或者参考他人文献会标明出处&#xff0c;非商用&#xff0c;如有侵权会删改&#xff01;欢迎大家斧正和讨论&#xff01;…

Java学习笔记四(继承)

1 继承继承的实现&#xff1a;public class 子类 extends 父类 {… }注释&#xff1a;子类可直接使用&#xff0c;父类&#xff08;保护&#xff0c;公开&#xff09;的属性和方法优点&#xff1a;减少重复代码&#xff0c;缺点&#xff1a;只能单继承// 父类 public class Tes…

NAT技术:SNAT与DNAT区别详解

1. 什么是NAT&#xff1f; 定义&#xff1a;NAT 是一种网络技术&#xff0c;用于在私有网络&#xff08;如家庭或企业局域网&#xff09; 与 公共网络&#xff08;如互联网&#xff09; 之间转换IP地址。它允许使用私有IP地址的设备通过一个&#xff08;或多个&#xff09;公共…

java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割

java语言中&#xff0c;list<String 转成字符串&#xff0c;逗号分割 在 Java 中&#xff0c;将 List<String> 转成逗号分割的字符串有多种方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一个静态方法&#xff0c;它可以方便地将集合中的元素用…

NineData云原生智能数据管理平台新功能发布|2025年8月版

本月发布 11 项更新&#xff0c;其中重点发布 5项、功能优化 6 项。重点发布数据库 DevOps - SQL 窗口支持 PolarDB 系列SQL 窗口新增支持 PolarDB PostgreSQL 与 PolarDB Oracle 数据源&#xff0c;扩展云原生数据库管理能力。新增 AWS 数据源支持新增支持 AWS Aurora Postgre…

【ARDUINO】通过ESP8266连接WIFI,启动TCP,接受TCP客户端指令【测试中】

通过ESP8266连接WIFI&#xff0c;启动TCP&#xff0c;接受TCP客户端指令**记录**2025年9月8日11:20:372025年9月9日08:45:342025年9月11日21:40:22**代码**记录 2025年9月8日11:20:37 【测试情况】 代码可以跑到正确连接WIFI&#xff0c;也能获得IP&#xff0c;但是启动TCP服…

(网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解

目录 核心知识回顾 网络核心原理 get和post的理解 解析http 加密请求和响应的一些关键字 Cookie和session 对密钥的理解 核心知识回顾 网络编程---socket api UDP DatagramSocket DatagramPacket TCP ServerSocket Socket 1.读写数据通过Socket,通过Socket内置的 lnpu…

前端框架对比分析:离线PWA + Cloudflare Workers部署

目录 概述 框架对比表格 详细分析 1. Astro ⭐⭐⭐⭐⭐ **强烈推荐** 2. Next.js ⭐⭐⭐⭐ **推荐** 3. Remix (现React Router) ⭐⭐⭐⭐⭐ **强烈推荐** 4. SvelteKit ⭐⭐⭐⭐ **推荐** 5. Nuxt.js ⭐⭐⭐ **一般推荐** 6. Vite + React ⭐⭐⭐ **基础选择** 推荐方案 🏆 …

9-10关于JS初学产生的问题

1.页面添加加载完成事件监听&#xff0c;页面加载完成后&#xff0c;执行页面初始化方法/函数; 这是什么意思 这句话描述的是前端开发中一种常见的操作&#xff1a;等待页面完全加载完成后&#xff0c;再执行特定的初始化代码。 简单来说&#xff0c;就是要确保页面上的所有元素…

项目中遇到pom文件里使用systemPath的例子记录

项目中遇到pom文件里使用systemPath&#xff0c;很少见&#xff0c;问了下豆包&#xff0c;记录下结果。在 Maven 的 pom.xml 中&#xff0c;<systemPath> 是 <dependency> 标签内的一个可选配置&#xff0c;用于手动指定本地系统中某个依赖包&#xff08;通常是 J…

10、向量与矩阵基础 - 深度学习的数学语言

学习目标:建立向量和矩阵的几何直观理解,掌握线性代数的核心概念,培养空间思维能力,为手搓大模型奠定扎实的数学基础 想象一下,当你使用GPT进行对话时,每个词汇都被转换成高维向量,整个对话历史变成一个巨大的矩阵。模型的"理解"过程,本质上就是在这个高维空…

【Python Tkinter】图形用户界面(GUI)开发及打包EXE指南

【Python Tkinter】图形用户界面&#xff08;GUI&#xff09;开发及打包EXE指南一、关于 Python Tkinter二、密码生成器示例2.1 使用Python添加图形用户界面&#xff08;GUI&#xff09;2.2 使用工具PyInstaller将应用打包成exe文件三、总结一、关于 Python Tkinter Python Tk…

【设计模式】【观察者模式】实例

一对多的统一监听 —— 这就是 观察者模式&#xff08;Observer Pattern&#xff09; 的经典应用场景。也就是说&#xff1a;一个事件源&#xff08;Subject&#xff09; → 可以注册多个监听器&#xff08;Observers&#xff09;&#xff1b;当事件发生时&#xff0c;一次性通…

C#测试调用OpenXml操作word文档的基本用法

OpenXML SDK是微软为高效处理Office文档&#xff08;如Word、Excel&#xff09;而开发的开源.NET库,它直接操作文档内部的XML结构&#xff0c;无需安装Office软件即可实现文档的创建、读取和编辑,常用于服务器端批量生成报表、自动化文档处理等场景&#xff0c;轻量且跨平台。本…

照度传感器考虑笔记

您好&#xff01;很高兴为您解答关于照度计传感器和设计的问题。这是一个非常专业且实际的话题。 一、照度计常用的照度传感器类型 照度计的核心是光电探测器&#xff0c;其工作原理是将光信号转换为电信号。目前主流的照度传感器都属于硅光电二极管&#xff08;Si Photodiode&…

C# Web API Mapster基本使用

安装包&#xff1a;Mapster1.注册MyRegister.Scan(); // 全局配置 //builder.Services.AddMapster(); // 需要安装Mapster.DependencyInjection包 builder.Services.AddScoped<IMapper,Mapper>();2.配置&#xff08;可不进行配置直接使用也行&#xff09;public class My…

<数据集>无人机航拍人员搜救识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/91899456数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;5755张 标注数量(xml文件个数)&#xff1a;5755 标注数量(txt文件个数)&#xff1a;5755 标注类别数&#xff1a;1 标注类别名称&#xff…