`
xidajiancun
  • 浏览: 454863 次
文章分类
社区版块
存档分类
最新评论

线程池模式比较

阅读更多

线程池模式一般分为两种:L/F领导者与跟随者模式、HS/HA半同步/半异步模式。
HS/HA半同步/半异步模式:分为三层,同步层、队列层、异步层,又称为生产者消费者模式,主线程处理I/O事件并解析然后再往队列丢数据,然后消费者读出数据进行应用逻辑处理;
优点:简化编程将低层的异步I/O和高层同步应用服务分离,且没有降低低层服务性能。集中层间通信。
缺点:需要线程间传输数据,因此而带来的动态内存分配,数据拷贝,语境切换带来开销。高层服务不可能从底层异步服务效率中获益。
L/F领导者跟随者模式:在LF线程池中,线程可处在3种线程状态之一:leader、follower或processor。处于leader状态的线程负责监听网络端口,当有消息到达时,该线程负责消息分离,并从处于follower状态中的线程中按照某种机制如FIFO或基于优先级等选出一个来当新的leader,然后将自己设置为processor状态去分配和处理该事件。处理完毕后线程将自身的状态设置为follower状态去等待重新成为leader。在整个线程池中同一时刻只有一个线程可以处于leader状态,这保证了同一事件不会被多个线程重复处理。
缺点:实现复杂性和缺乏灵活性;
优点:增强了CPU高速缓存相似性,消除了动态内存分配和线程间的数据交换。
两种模式性能分析:
L/F模式处理一个消息的时间为多路分离、分配、处理的时间,加上线程管理时间,LF中多个线程共享一个事件源,所以,需要协调它们间的行为,即有同步开销,L/F同步开销仅为申请/释放锁的开销,在LF处理请求过程中并不需要线程上下文切换,但是在线程由follower成为leader时需要进行线程上下文切换,所以当两个请求同时到达时,这种上下文切换会影响第二个请求的处理时间,也会带来一定的上下文开销。
T(L/F)=T(多路分离)+T(分配)+T(处理)+T(同步)+T(上下文)
HS/HA模式监听线程和工作线程间通过一个消息队列来交换数据。这会带来数据传递开销,。同时,监听线程和工作线程都需要去访问消息队列,造成了资源的竞争,需要额外的同步机制来协调他们的行为,包括监听线程获取和释放资源锁,对应的工作线程获取和释放资源锁,以及监听线程在将一个请求放入队列后通知工作线程带来的开销,我们称此为同步开销,HS/HA模式的同步开销大于L/F的同步开销,。一个请求由监听线程负责放入消息队列,但是却由工作线程来处理,所以,每个请求都会造成一次线程上下文切
换,由此带来的开销我们称为上下文开销。
T(H/H)=T(多路分离)+T(分配)+T(处理)+T(同步)+T(数据传递)+T(上下文)
从上面分析可以看出没有并发情况下L/F模式线程池模式性能优于HS/HA模式。
并发性能分析:
T(多路分离)、T(分配):LF和HH中把每一个消息的到来当作一个事件来处理。事件分配所做的工作是在一个事件处理器注册表中为一个事件查找事件处理器。这一步骤花费的时间随着当前注册的事件处理器的个数变化。当线程池接受用户连接请求后会为每一个连接注册一个事件处理器,所有通过该连接发来的请求都将由同一个事件处理器来处理。而事件处理器表采用一个平衡二叉树来实现。因此,事件分配的时间可以认为是随着并发用户数的增大而增大;
T(处理)处理消息和管理线程所需的时间都不受并发用户数的影响。
T(线程管理),多线程带来的线程管理开销只会随着线程池中线程数而变化,相对固定。
LF和HH的吞吐量会随着并发用户数的增加而增加。当并发用户数达到一定数量时,CPU成为系统瓶颈,此后增大并发用户数不仅不能增加并发处理的请求个数,反而会加大多路分离和分配的时间,从而使得系统吞吐量下降。
最佳性能时线程线:
随着线程数的增多吞吐量不断增大,当达到最大值后有一个短暂的保持阶段,此后继续增大线程数反而会使得吞吐量减小。而且当请求类型为计算密集型时线程数对
HH 的吞吐量的影响并不是很明显。原因是HH线程池在增加线程数时线程管理开销也有较大幅度的增加。因此,通过增大线程数来改善系统性能对HH来说并不是一种有效的方法。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xhs_lh04/archive/2008/05/24/2476820.aspx

分享到:
评论

相关推荐

    多线程控制,线程池模式,HTTP线程

    多线程控制 线程池模式 HTTP线程 用户点击数量控制在一个线程池模式下

    Linux环境下线程池模式的研究.pdf

    Linux环境下线程池模式的研究.pdf

    Java线程池及观察者模式解决多线程意外死亡重启问题

    Java线程池及观察者模式解决多线程意外死亡重启问题,附件含两个要运行代码!

    一种模拟人类思维模式的线程池

    这样的线程池模式于人类的思维模式明显不一致,使得程序人员使用很不方便。下面我们提出了一种模拟人类思维模式的线程池的使用办法:那就是在我需要帮助的时候,我就叫来他人来帮助。我告诉“他人”应该怎么干,...

    线程池 + 工厂模式 + 工厂方法 + 单件模式

    线程池、工厂模式、工厂方法、单件模式、内存池的简单实现,代码量1300 行,有测试样例 ~ 发现有BUG请指正, thx

    VC++ 线程池IOCP模式下的封装

    VC++ 线程池IOCP模式下的封装 CThreadPool::CThreadPool( size_t initialThreads, size_t minThreads, size_t maxThreads, size_t maxDormantThreads, size_t poolMaintPeriod, size_t dispatchTimeout, ...

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式...其实还有两类:并发型模式和线程池模式。

    VC实现的线程池

    在项目中,由于移动设备需要跟管理中心进行请求服务,在管理中心使用并发模式对请求进行处理(与其对应的是轮询模式),由于每次连接就需要创建一个线程对相应的请求提供服务,所以需要频繁的创建线程,而服务结束或者...

    23种JAVA设计模式和15种J2EE设计模式

    设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观...其实还有两类:并发型模式和线程池模式。

    Java23种设计模式可直接运行Demo

    设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观...其实还有两类:并发型模式和线程池模式。

    设计模式自己总结一句话描述

    设计模式分为三大类: 创建型模式,共五种: 工厂方法模式、抽象工厂模式、单例模式、构建者模式、原型模式。 结构型模式,共七种: 适配器模式、装饰器模式、代理模式、...其实还有两类:并发型模式和线程池模式。

    23种设计模式java源码

    设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观...其实还有两类:并发型模式和线程池模式。

    cpp-利用C编写的HTTP服务器使用线程池Reactor模式

    利用 C 编写的 HTTP 服务器,使用线程池 Reactor 模式

    VC++ TCP_IP线程池IOCP模式下的封装库源码.rar

    C++ TCP/IP线程池IOCP模式下的封装库源代码,

    VC6.0中C++实现线程池

    在项目中,由于移动设备需要跟管理中心进行请求服务,在管理中心使用并发模式对请求进行处理(与其对应的是轮询模式),由于每次连接就需要创建一个线程对相应的请求提供服务,所以需要频繁的创建线程,而服务结束或者...

    23种设计模式

    介绍23种设计模式。总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、...其实还有两类:并发型模式和线程池模式。

    java种设计模式详解

    详细描述了java设计模式种23种模式,其中包括,创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...其实还有两类:并发型模式和线程池模式。

    23种设计模式.docx

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合...其实还有两类:并发型模式和线程池模式。

    java线程池讲义+代码

    线程池是一种线程使用模式。在线程池中维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。使用线程池不仅能够保证内核的充分利用,还能防止过分调度。WEB...

    基于对象池模式的自适应线程池技术

    基于对象池模式的自适应线程池技术 。。。。。

Global site tag (gtag.js) - Google Analytics