线程池与非线程池应用场景及模型对比分析

16、线程池与异步编程模型详解 本文详细解析了线程池和异步编程模型(APM)的原理、实现与优化策略。内容涵盖线程池性能分析、异步编程的两种主要模式(APM和事件驱动异步模式)、APM的详细实现、异步工作的会合机制、ASP.NET异步页面的应用以及线程池性能优化方法。同时提供了完整的代码示例,帮助开发者理解如何在实际项目中应用这些技术。最后还探讨了异步编程的注意事项和未来发展趋势,是提升应用程序性能和可扩展性的必备知识。 阅读详情

在网络编程中经常用到线程池和连接池,今天就对其中常用的线程池的基本应用场景和模型做个简单的对比分析。

1、  业务流程对比 

a、  非线程池业务流模型: 

 


上图标识了基本的非线程池的线程模型,前端1有多少连接则前端客户端2与前端服务器端3均需建立一对一的线程数进行响应的连接。前端服务器端3与后端服务器端4也需建立响应数目的线程进行连接处理相关业务。

当一个任务处理完毕后线程退出,在下一个任务到来的时候前端服务器端创建新的线程来处理新的任务。

 

b、线程池模型:


上图标识了基本的线程池模型。前端客户端大量的连接通过服务端的任务接收线程将连接任务放入前端服务器端的任务队列中,前端服务器端起固定数量的处理线程处理前端的任务,当处理线程处理完任务后从任务队列中获取下一个处理任务。保证了前端服务器端和后端服务器端的连接数不会超过前端服务器端的处理任务线程数n,从而保证了后端服务器端的压力。

当处理线程处理完一个任务而任务队列中没有任务的时候线程并不退出,阻塞等待新的任务。

通过上图可以看出,当前端服务器端通过设置合理的处理线程数和任务队列大小,可以有效的屏蔽前端客户端高并发量对后端服务器端的冲击。

 

 

2、  应用场景分析对比

a、  非线程池模型

适用于单次连接任务执行时间较长,并发量不高的情况。一旦并发量很高则线程频繁创建的开销是巨大的。

b、  线程池模型

适用于单次任务执行时间较短,但并发访问量高的情况。当处理线程数设置极大的时候和非线程池模型几乎没有差别

 

3、  优化细节

a、在线程池模型中,可以预创建部分处理线程,随后根据实际的业务需求来创建新的线程,直到创建设置的最大线程数

b、一定时间内关闭一些空闲线程,回收部分资源

PLC作为Modbus TCP客户端 PLC作为Modbus TCP客户端,Modbus Slave作为服务器 阅读详情

相关推荐

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 299

使用线程池和不使用线程池的区别

目的:随机产生一个整数并加入到一个队列中。 1.使用线程池:  long startTime=System.currentMillis();  final List<Integer> l=new LinkedList<Integer>();  ThreadPoolExecutor tp=new ThreadPoolExecutor(1,1,60,TimrU...

a214280的博客 773

用python提取PDF中各类文本内容的方法

用python提取PDF中各类文本内容的方法

安静的软件工程师 6082

面试官问:高并发下,你都怎么选择最优的线程数?

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 294

博科的SAN交换机基本操作

2、添加用户testuser赋予user权限可以访问1-128VF默认VF为128账号描述"Test user"密码为password123。1、创建zone别名(100是指当前设备Domain ID,1和2是指对应的index号)2,删除新接入设备的ZONE或保持ZONE配置一致。3、将zone添加到当前生效的CFG中。2、将zone添加到当前生效的CFG中。3、将zone添加到当前生效的CFG中。3,将添加的级联端口持续关闭。4、将当前zone生效。4、将当前zone生效。1、查看当前所有用户。

chenjunokok的博客 1837

STC15W204S最小系统开发指南:从串口通讯到自动热加载全流程

本文详细介绍了STC15W204S最小系统的完整开发流程。从芯片资源解析、最小系统搭建、串口通讯驱动编写(使用Timer2生成波特率),到实现基于魔术值触发的自动热加载功能,并最终集成Keil与STC-ISP软件,构建高效的自动化开发工作流,显著提升嵌入式调试效率。

a1b2c的博客 391

使用线程池与非线程池的区别

我们编写一段示例代码,来验证下线程池与非线程池的区别: //线程池和非线程池的区别 public class ThreadPool { public static int times = 100;//100,1000,10000 public static ArrayBlockingQueue arrayWorkQueue = new ArrayBlocking...

落叶飘零z的博客 914

多模态特征融合方法总结

由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。 首先,多模态特征融合的方法大体分为三种

华辰烟雨的博客 9万+

线程池的使用场景

线程池的使用场景

weixin_40017062的博客 6798

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

R语言层次聚类(hierarchical clustering):数据缩放、PCA聚类结果可视化、fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性

R语言层次聚类(hierarchical clustering):数据缩放、PCA聚类结果可视化、fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性

data+scenario+science+insight 832

什么情形下适合使用线程池技术

线程池适用情况: 单位时间内处理数目巨大的连接请求,但处理时间相对较短。主要特点就是使用与创建技术,将线程创建和销毁本身带来的开销分摊到具体任务上,任务执行次数越多,则节省时间越多。再有一个就是线程池采用与创建技术创建的线程池规模一般有一个上界,可以解决一些服务器无法同时创建一定量数目线程的问题。线程池将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,

gukesdo的专栏 4829

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2771

线程池的介绍及其管理

线程池底层使用阻塞队列BlockingQueue 并发队列 非阻塞队列 ConcurrentLinkedQueue (poll peek) 阻塞队列 BlockingQueue (ArrayBlockingQueue offer) 阻塞队列与非阻塞队列 阻塞队列常用于生产者和消费者的场景 生产者–>队列–>消费者 被阻塞的情况主要有如下两种: 当队列满了的时候进行入队列操作 当队列...

L__MY的博客 341

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

多进程 VS 多线程 VS 线程池 VS EventLoop

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33762130的博客 277

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

对比分析LinkedBlockingQueue和SynchronousQueue

根据上面的两个类的 UML 图,可以发现两者都实现了相同的接口BlockingQueue,所以都是阻塞队列,在特定条件下都会阻塞线程调用,只是底层实现不相同而已。对比维度容量可选有界/无界(默认)的FIFO阻塞队列,基于链表节点存储元素容量为0的阻塞队列,不存储元素,只在线程间直接交换数据底层结构链表结构:内部有节点类存放元素,维护头尾指针和计数器。使用两把锁(putLocktakeLock)分别控制入队出队。有条件变量notFullnotEmpty用于阻塞等待。无具体数据结构容器。

weixin_37057616的博客 40

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java 阻塞队列详解(原理 + 场景 + 对比)

Java阻塞队列摘要 阻塞队列是Java并发编程中的核心工具,主要用于生产者-消费者模型,解决线程安全与阻塞等待问题。其特点包括:队列满时生产者阻塞,队列空时消费者阻塞,底层通过ReentrantLock和Condition实现线程安全。

2201_75355172的博客 899

【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解

如图,在生活中,学生就是消费者角色,工厂是真正的生产者角色,那么超市是什么呢?为什么需要超市?超市是交易场所。

Elena's Blog 1640

Executors 和 ThreadPoolExecutor 和 CompletableFuture 三者 区别

在Java中CompletableFuture用于异步编程,异步通常意味着非阻塞,运行任务单独的线程,与主线程隔离。并且通过回调可以在主线程中得到异步任务的执行状态,是否完成和异常等信息。通过这种方式,主线程不会被阻塞,不需要一直等到子线程完成。主线程可以并行的执行其他任务。使用这种并行方式,可以极大的提高程序的性能。

java_2017_csdn的博客 1613

NIO与BIO的区别、NIO的运行原理和并发使用场景

这是一个经典的每连接每线程的模型,之所以使用多线程,主要原因在于socket.accept()、socket.read()、socket.write()三个主要函数都是同步阻塞的,当一个连接在处理I/O的时候,系统是阻塞的,如果是单线程的话必然就挂死在那里;NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。...

Java_ttcd的博客 738

Apache HttpClient 的请求模型和 I/O 类型

Apache HttpClient 提供同步(BIO)和异步(NIO)两种请求模型,不同版本实现方式不同。HttpClient 4.x默认采用同步阻塞I/O,简单但线程开销大;HttpAsyncClient 4.x基于NIO实现异步非阻塞,适合高并发。HttpClient 5.x统一API,底层使用NIO,能同时支持同步/异步调用。生产环境中,高并发服务推荐异步NIO模式,普通应用可用5.x的同步API(底层仍为NIO优化)。性能方面,异步NIO的线程利用率更高,适合>1000 QPS场景,而同步BI

龙大的博客 673

Java 并发方案全面学习总结

并发与并行的概念 并发(Concurrency): 问题域中的概念—— 程序需要被设计成能够处理多个同时(或者几乎同时)发生的事件 并行(Parallelism): 方法域中的概念——通过将问题中的多个部分 并行执行,来加速解决问题。 进程、线程与协程 它们都是并行机制的解决方案。 进程: 进程是什么呢?直白地讲,进程就是应...

weixin_33720452的博客 218

线程基础知识-产生、退出、状态切换

线程的结束方式:变量和事件 线程的通信方式:变量和消息 线程的两个组成部分:线程的内核对象和线程栈 /************** 引入线程优点******************/ (1)易于调度 (2)提高并发性 (3)开销小;创建线程比创建进程快,所需要的开销也小; (4)有利于发挥多处理器的功能。通过创建多线程,每个线程都在一个处理器上运行,从而实现应用改程序的并行,使每

xiaobangkuaipao的博客 545

Java面试题-并发篇十六

161,Java内存模型是什么? Java内存模型规定和指引Java程序在不同的内存架构,CPU和操作系统间有确定性地行为。它在多行程的情况下尤为重要。Java内存模型对一个线程所做的变动能被其他线程可见提供了保证,它们之间是先行发生关系。这个关系定义了一些规则让程序员在并发编程时思路更清晰。比如,先行发生关系确保了: 线程内的代码能够按先后顺序执行,这被称为...

LMAKE_nbsp的博客 167
上一篇: makefile编写差异
下一篇: 进程间通信---匿名管道pipe
fly542
博客等级 码龄18年 150粉丝 81原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值