`

ICE线程池模型

 
阅读更多

ICE线程池模型 — L/F领导者跟随者模式

摘自:Leo 阿材
网址:http://blog.csdn.net/ecjtuync/archive/2009/06/15/4270314.aspx

程池模式一般分为两种: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来说并不是一种有效的方法。

分享到:
评论

相关推荐

    ICE_1.rar_ICE_ICE 并发

    5. **并发模型**:ICE可能支持不同的并发模型,如基于事件的模型或者基于线程的模型,开发者可以根据应用场景选择合适的模型。 6. **异步调用**:ICE可能提供异步调用机制,允许函数调用不阻塞当前线程,而是立即...

    ice-3.7_src.zip

    ICE 3.7使用了线程池来管理并发请求,有效地利用系统资源,提高了服务的响应速度。源码中的线程管理模块展示了如何优雅地处理并发问题。 五、安全性与认证 ICE 3.7提供了安全性和身份验证机制,包括SSL/TLS加密和...

    Ice Manual(3.7.0/3.7.1)

    7. **线程模型**:讨论了Ice的多线程支持,包括线程池、同步策略以及如何在多线程环境中正确使用Ice对象。 8. **安全性**:讲述了Ice的安全特性,如身份验证、授权、加密通信以及如何实现安全的分布式服务。 9. **...

    ice教程&中文版手册

    ICE 设计之初就考虑到了高并发场景,其内部使用了高效的线程池和事件驱动模型,能够有效地处理大量并发请求。此外,ICE 还提供了负载均衡和故障恢复机制,增强了系统的可用性和稳定性。 **"ice教程&中文版手册"内容...

    ICE系列培训三ppt

    - ICE线程模型:ICE支持多种线程模型,如预派发模型和回调模型,以适应不同应用场景的需求。 - 字符串编码:ICE支持宽/窄字符集转换,使得跨语言和跨平台的通信更为便捷。 - 代理插件开发:ICE允许开发者编写插件来...

    一个ICE的简单应用(客户端,服务端都有)

    2. **ICE通信模型**: - **同步通信**: 客户端发起请求,等待服务端响应,然后继续执行后续代码。这种方式简单但可能阻塞客户端。 - **异步通信**: 客户端发起请求后立即返回,服务端完成后再回调客户端。这种方式...

    ice-3.7.3.tar.gz

    在并发处理上,Ice 3.7.3支持多线程和异步调用,通过线程池管理和回调机制,有效地利用了系统资源,提升了系统并发性能。源码中包含了线程安全的实现,以及调度策略的代码,这对于理解和优化多线程程序具有很高的...

    ice网络通信引擎

    ICE支持RPC(Remote Procedure Call)模型,允许开发者像调用本地对象一样调用远程对象,简化了分布式系统的开发。它通过接口和代理机制实现了这一特性,使得客户端和服务器端之间的通信变得透明。 2. **跨平台性*...

    VC+ICE服务端实现源码

    7. **并发与多线程**:ICE支持多线程模型,因此服务端可能采用了线程池或者其他并发策略来处理多个客户端的并发请求。这需要开发者对C++的多线程编程有深入理解。 8. **异常处理**:在服务端代码中,错误和异常处理...

    ice-3.4.1-demos.zip

    ICE提供了高效的并发模型,使得服务端可以同时处理多个客户端请求。Demo中包含了线程池的使用和线程安全的示例,演示了如何优雅地处理并发问题,提升系统性能。 4. **序列化与反序列化** 数据交换是分布式系统中...

    Ice-3.4.2_Manual

    4. 多线程支持:Ice 提供了内置的多线程模型,使得开发者可以在服务端轻松地并行处理多个请求。这不仅可以提高服务器的吞吐量,还可以更好地应对高并发场景。通过线程池管理,开发者可以控制系统的资源消耗,平衡...

    中间件技术:ice 入门介绍

    Ice 核心库是ICE的主体部分,负责管理所有通信任务,包括高效的协议(支持TCP/UDP层上的协议压缩)、多线程服务器的线程池管理,以及大规模对象可扩展性的支持。 3. **IceUtil** IceUtil 提供了一系列实用的C++...

    ice-3.5bate

    4. **并发与线程模型**:ICE提供了线程池和并发控制策略,有助于优化多线程环境下的性能。 5. **容错与故障恢复**:ICE具有心跳检测和故障通知机制,能在网络不稳定或服务器故障时自动恢复连接。 6. **负载均衡**...

    ICE系列培训ppt二,AMI和AMD相关

    【ICE系列培训】第二部分主要围绕着异步模型在ICE中的应用展开,特别是涉及了Asynchronous Method Invocation(AMI)和Asynchronous Method Dispatch(AMD)的概念。ICE作为一个异步中间件平台,提供了同步行为的...

    dsss.rar_udp线程池_局域网NAT_重叠io

    STUN(Session Traversal Utilities for NAT)、TURN(Traversal Using Relays around NAT)和ICE(Interactive Connectivity Establishment)等技术可以帮助UDP通过NAT进行通信,实现P2P应用的连接。 重叠IO...

    Ice分布式程序设计文档英文版

    - **特性**: 自动管理线程池、连接管理等功能。 **3.2 C#** - **IceDotNet**: 提供了.NET平台下的绑定库。 - **特性**: 支持.NET Framework和.NET Core。 **3.3 C++** - **IceC++**: 最早支持的平台之一,提供了...

    Android编程中关于单线程模型的理解与分析

    4. `ThreadPoolExecutor`:更灵活的线程池实现,可以自定义线程池参数,适合处理大量的并发任务。 理解并合理运用Android的单线程模型和多线程机制,是优化应用性能、提升用户体验的关键。开发者需要遵循上述原则,...

    android40.原生代码

    在Android世界中,Android 4.0(Ice Cream Sandwich,简称ICS)是一个重要的里程碑,它融合了智能手机和平板电脑的设计,提供了更为统一和流畅的用户体验。对于初学者来说,研究Android 4.0的原生代码是理解Android...

    NAT穿越(UDP)

    6. **多线程编程**:为了保证服务器和客户端的并发处理能力,通常需要使用多线程或异步I/O模型。Java的`java.util.concurrent`包提供了线程池和并发工具类,有助于管理并发任务。 7. **异常处理**:网络编程中,...

Global site tag (gtag.js) - Google Analytics