【C#】ThreadPool的使用
1.Thread的使用
Thread的使用参考:【C#】Thread的使用
2.ThreadPool的使用
.NET Framework 和 .NET Core 提供了 System.Threading.ThreadPool 类来帮助开发者以一种高效的方式管理线程。ThreadPool 是一个线程池,它能够根据需要动态地分配和回收线程,从而提高应用程序的性能。
下面是关于如何在 C# 中使用 ThreadPool 的基本示例:
1. 基本用法
要使用 ThreadPool 来执行一个方法,你可以调用 QueueUserWorkItem 方法。这个方法会将指定的工作项加入到 ThreadPool 的队列中,并由 ThreadPool 决定何时执行。
1.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){// 使用匿名方法来定义工作项ThreadPool.QueueUserWorkItem(state => DoSomeWork(state));Console.WriteLine("Main thread is doing some work...");Console.ReadLine();}static void DoSomeWork(object state){Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} is processing {state}");}
}
2. 获取工作完成的通知
有时需要知道 ThreadPool 已经完成了你的任务。这可以通过向 QueueUserWorkItem 方法传递一个回调委托来实现。
2.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){// 定义回调函数WaitCallback callback = state => DoSomeWork(state);// 注册回调函数ThreadPool.QueueUserWorkItem(callback, "Hello from ThreadPool");// 在主线程上等待一段时间,确保回调被处理Thread.Sleep(1000);Console.WriteLine("Main thread continues...");Console.ReadLine();}static void DoSomeWork(object state){Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} is processing {state}");}
}
3. 设置最大线程数
可以通过设置 ThreadPool.SetMaxThreads 方法来限制 ThreadPool 可以使用的最大线程数。
3.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){int maxWorkerThreads, maxIoCompletionThreads;// 设置最大线程数ThreadPool.SetMaxThreads(50, 100);// 获取最大线程数ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxIoCompletionThreads);Console.WriteLine($"Max Worker Threads: {maxWorkerThreads}");Console.WriteLine($"Max IO Completion Threads: {maxIoCompletionThreads}");Console.ReadLine();}
}
4. 获取当前可用线程数
也可以获取当前 ThreadPool 中可用的线程数量。
4.1 示例代码:
using System;
using System.Threading;class Program
{static void Main(){int availableWorkerThreads, availableIoCompletionThreads;// 获取当前可用线程数ThreadPool.GetAvailableThreads(out availableWorkerThreads, out availableIoCompletionThreads);Console.WriteLine($"Available Worker Threads: {availableWorkerThreads}");Console.WriteLine($"Available IO Completion Threads: {availableIoCompletionThreads}");Console.ReadLine();}
}
以上就是一些基本的 ThreadPool 使用示例。
5.请注意
ThreadPool 的设计是为了高效地管理和调度线程,所以它非常适合于那些可以并行执行的任务。然而,对于长时间运行的任务或者对线程控制有更严格要求的任务,可能需要考虑使用其他机制如 Task 或 Task Parallel Library (TPL)。
3.CancellationTokenSource与Thread的启动、取消的区别
使用参考:
【C#】 CancellationTokenSource 与Thread的启动、取消的区别?-CSDN博客文章浏览阅读816次,点赞10次,收藏9次。【C#】 CancellationTokenSource 与Thread的启动、取消的区别?https://blog.csdn.net/wangnaisheng/article/details/140541192
相关文章:
【C#】ThreadPool的使用
1.Thread的使用 Thread的使用参考:【C#】Thread的使用 2.ThreadPool的使用 .NET Framework 和 .NET Core 提供了 System.Threading.ThreadPool 类来帮助开发者以一种高效的方式管理线程。ThreadPool 是一个线程池,它能够根据需要动态地分配和回收线程…...
【Python系列】Python 中`eval()`函数的正确使用及其风险分析
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
使用Spring Boot开发应用:基于请求参数MD5的缓存键及其他缓存方式
本文将介绍如何在Spring Boot应用中实现基于请求参数MD5的缓存键,以及其他常见的缓存方式。通过实际代码示例,展示如何应用这些技术优化系统性能。 1. 引入必要的依赖 首先,在Spring Boot项目中引入缓存相关的依赖。修改pom.xml文件&#x…...
typescript中interface常见3种用法
文章目录 函数类型对象类型【自命名】: (函数)对象类型 函数类型 作用:声明一个函数接口:可用于类型声明 | 不可implements 对象类型 作用:声明对象具备哪些实例接口:可用于类型 | 可implements 【自命名】&…...
windows10 安装CUDA教程
如何在windows10系统上安装CUDA? 1、查看电脑的NVIDIA版本 nvidia-smi 2、官网下载所需CUDA版本 官网地址:https://developer.nvidia.com/cuda-toolkit-archive 我们所安装的CUDA版本需要小于等于本机电脑的NVIDIA版本。推荐使用迅雷下载,速度会更快哦。 3、安装步骤...
计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
PSO求解函数最小值的MATLAB例程|MATLAB源代码
本篇文章适合PSO入门,进阶的可能会觉得太简单的。 目录 PSO例程作用运行结果代码函数解释 例程修改tips PSO Particle Swarm Optimization,粒子群优化算法,通过模拟鸟群或鱼群的行为来寻找最优解。在计算时通过对一群粒子的位置和速度进行迭…...
scrapy 爬取旅游景点相关数据(一)
配套视频可以前往B站:麦麦大数据 项目目标: 爬取的是穷游旅游景点列表 、评论数据 📊 章节: 😆 Scrapy 爬取旅游景点相关数据(一) 😆 Scrapy 爬取旅游景点相关数据(二) &…...
构建铁塔基站安全防护网:视频AI智能监控技术引领智慧化转型
一、背景现状 随着通信技术的快速发展,铁塔基站作为重要的通信基础设施,其安全、稳定、高效的运行对于保障通信网络的畅通至关重要。然而,铁塔基站大多分布在公路边、高山、野外等区域,巡检难度大,维护效率低…...
Java中的分布式缓存:Ehcache与Hazelcast
Java中的分布式缓存:Ehcache与Hazelcast 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的两种分布式缓存技术:Ehcache与Hazelcast。分布式缓存可以显…...
前端开发工程师的薪资,主要取决于哪3个方面?
作者:清水束竹 从2022年开始,互联网行业的就业情况就不容乐观了。 最明显的三个表现:裁员、缩招、降薪。 其实2021-2022年年中那段时间,互联网企业出现了一波假性繁荣。 某些大厂Q大量招聘应届毕业生,宣传铺天盖地,不…...
springboot美食网站—计算机毕业设计源码11574
摘 要 随着人们生活水平的提高,人们对美食的要求也越来越高,对各类美食信息需求越来越大。因此,结合计算机快速发展、普及,在此基础上制作一个页面简单、美观,功能实用的美食网站势在必行,满足用户分享美食的需求。 美…...
WordPress建站:如何使用ChemiCloud搭建外贸独立站
以前自行搭建一个网站,不懂一点技术那是很难完成的,现如今WordPress的出现极大地降低了搭建网站的技术门槛,不需要懂任何代码,只需按步骤操作就行。WordPress 是一个非常流行的开源内容管理系统(CMS)&#…...
在 Vim 编辑器中,如果某个单词被意外地高亮显示,使用:noh可以取消高亮显示
文章目录 1、问题出现的背景2、解决办法 1、问题出现的背景 配置镜像加速器,修改 /etc/docker/daemon.json 目录下的文件,不小心高亮显示https,产生问题的步骤是,我先是按esc键退出vim的编辑模式,然后在https的前面按…...
一条命令安装mysql,php
一条命令安装mysql,php,wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp...
配置maven环境
一、把maven文件下载到D盘下 二、创建一个maven文件夹,并在其中创建一个repository文件夹 三、桌面右键单击属性设置,搜索环境 添加MAVEN HOME变量,让然后把apache-maven路径下的bin文件的路径复制进来 用记事本或者NotePad打开下图路径的set…...
飞书打卡 快捷指令
使用快捷指令定时飞书打卡 在网上找了一圈,只有钉钉打卡的快捷指令,但是公司换飞书,哪个打工人不怕忘记打卡呢,所以自己研究了一下,其实也很简单。 找url 问题的最关键是打开飞书的打卡界面 如果只是打开飞书APP 很…...
LeYOLO,一种用于目标检测的新型可扩展且高效的CNN架构
摘要 在目标检测中,深度神经网络的计算效率至关重要,尤其是随着新型模型越来越注重速度而非有效计算量(FLOP)。这一发展趋势在某种程度上忽视了嵌入式和面向移动设备的AI目标检测应用。在本文中,我们基于FLOP关注于高…...
docker安装phpMyAdmin
直接安装phpMyAdmin需要有php环境,比较麻烦,总结了使用docker安装方法,并提供docker镜像。 1.docker镜像 见我上传的docker镜像:https://download.csdn.net/download/taotao_guiwang/89595177 2.安装 1).加载镜像 docker load …...
举例详细学习和分析后端业务逻辑代码开发思路
在此之前,先来补充一下上一篇文章的一点内容:上一篇文章点击此处详看 对于画线的这句话,来详细解释一下吧! 这里面说,对于service服务层,如果我们所需要实现的业务比较简单的话可以直接在...service接口里面…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
