.NET线程池技术实现多任务批量处理的实例分析

发布时间:2021-10-28 09:14:48 作者:柒染
来源:亿速云 阅读:430

今天就跟大家聊聊有关.NET线程池技术实现多任务批量处理的实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、多线程技术应用场景介绍

本期同样带给大家分享的是阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何采用基于开源组件SmartThreadPool线程池技术实现多任务批量处理。

在工作中您是否遇到过如何快速高效的处理Job任务列表、如何通过多线程批量处理订单、如何多线程群发短信、如何批量上传图片到远程服务器或者云服务器、如何通过多线程让应用程序提高对CPU的利用率从而增加应用程序的处理效率,等等。

如果您有遇到类似的业务场景的而感到烦恼的话,那么今天您看完阿笨的分享课后下次碰到这类疑难杂症的问题一定不再困惑,思绪一下子会豁然开朗。如果您对本期的教程内容感兴趣,那么大家跟着阿笨一起学习吧!

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。

二、概念名称含义解释

2.1、什么是线程(Thread)和线程池(ThreadPool)?

线程(Thread):是Windows任务调度的最小单位。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数,在一个应用程序中,常常需要使用多个线程来处理不同的事情,这样可以提高程序的运行效率,也不会使主界面出现无响应的情况。

线程池(TheadPool):基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由线程池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。

2.2、为什么有了Thread还需要ThreadPool?

如果你的代码涉及了大量使用Thread,那么有可能会超过系统最大的线程数导致崩溃,而且每次创建和销毁线程也是很耗资源,由于线程池中的线程已经准备好且等待被分配任务,应用程序可以直接拿来使用而不用新建一个线程。所以使用ThreadPool就可以帮你提高代码效率并管理你的线程。使用ThreadPool的好处如下:

减少线程间上下文切换。线程执行一定的时间片后,系统会自动把cpu切换给另一个线程使用,这时还需要保存当 前的线程上下文状态,并加载新线程的上下文状态。当程序中有大量的线程时,每个线程分得的时间片会越来越少,可能会出现线程未处理多少操作,就需要切换到 另一线程,这样频繁的线程间上下文切换会花费大量的cpu时间。

减少内存占用。系统每创建一条物理线程,需要大概花费1MB的内存空间,许多程序喜欢先创建多条物理线程,并 周期轮询来处理各自的任务,这样既消耗了线程上下文切换的时间,还浪费了内存。这些任务可能只需要一条线程就能满足要求。假如某一任务需要执行较长的周 期,线程池还可以自动增加线程,并在空闲时,销毁线程,释放占用的内存。

2.3、为什么强烈推荐使用SmartThreadPool而不是.Net默认的ThreadPool?

.Net默认的线程池(ThreadPool)是一个静态类,所以是没办法自己创建一个新的程序池的。默认的线程池与应用程序域 (AppDomain)挂钩,一个AppDomain只有一个线程池。假如在线程池中执行了一个周期较长的任务,一直占用着其中一个线程,可能就会影响到 应用程序域中的其他程序的性能。例如,假如在Asp.Net的线程池中执行一个周期较长的任务,就会影响请求的并发处理能力(线程池默认有个最大线程 数)。

SmartThreadPool是大名鼎鼎的.Net线程池项目,基于.Net开发,比.Net内置的线程池更胜一筹。顾名思义,智能线程池.一定比NET自带的线程池有过人之处.不然也没有必要再搞个出来了。

SmartThreadPool重要特性总结如下:

可创建线程池实例。

可动态调整线程池工作线程数量。

WorkItem 可以返回信息、调用者可等待多个或全部 WorkItem 执行结束。

可以设置 WorkItem 优先级。

等等......

三、线程池处理多任务原理图

.NET线程池技术实现多任务批量处理的实例分析

四、涉及覆盖的知识点

4.1、WinForm桌面应用程序开发小技术和技能。如下:

1、比如System.Threading.Timer定时器在实际项目中的大量灵活运行。

2、如何快速的通过阿笨提供的控件库实现桌面应用程序的UI美化和人性化布局。

3、C#中使用Settings.settings来存储用户自定义配置文件。

4、C#如何快速的创建Windows服务应用程序。

5、C#如何支持批处理文件(bat)以及如何通过批处理指令连接远程服务器建立本地映射盘。

等等......

4.2、阿笨本次分享课将给大家带来在实际项目中的三种技术解决办案如何采用多线程技术来实现多任务的批量处理。以后碰到这样的通用的业务场景时,你会感觉到“手到擒来,得心应手”。如下:

1、如何使用SmartThreadPool线程池技术实现多任务的批量处理。(强烈推荐)

2、如何使用.NET默认自带的ThreadPool线程池技术实现多任务的批量处理。

3、如何使用.NET 4.5异步编程Task技术实现多任务的批量处理。

4.3、第三方开源组件的基本使用

1、日志框架,Nlog和Log4net。

2、序列化组件json.net。

2、如何使用开源Topshelf组件创建Windows服务。

五、SmartThreadPool基本使用

 5.1、github源码地址:

         https://github.com/amibar/SmartThreadPool

5.2、NuGet进行在线下载:

Install-Package SmartThreadPool.dll

5.3、演示SmartThreadPool如何实现等待多个Job任务执行完成

.NET线程池技术实现多任务批量处理的实例分析

看完上述内容,你们对.NET线程池技术实现多任务批量处理的实例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. 基于SmartThreadPool线程池技术实现多任务批量处理
  2. python中如何实现多任务copy文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:.NET开源Protobuf-net组件怎么用

下一篇:Mysql数据分组排名实现的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》