ICE学习(七)-线程池

线程池


服务器线程池

每个服务器(communicator)有2个线程池:

Client thread pool:处理对客户端请求的回复,并回调(通知客户端异步回调对象AMI callback objects)。

Server thread pool:处理客户端的请求。

配置线程池

name.Size

线程池的初始大小,默认值1

name.SizeMax

线程池最大体积。默认值1。如果name.SizeMax小于name.Sizename.SizeMax会被调整到等于name.Size

name.SizeWarn

当线程池中的线程数达到此属性的值时,会打印告警信息。如果你的程序经常产生这种告警,说明应该增加name.SizeMax,以达到更高效率。默认值0,不显示告警。

name.StackSize

设置线程的栈大小。此属性没被定义或者设为0时,将使用操作系统指定的默认值。

name.Serialize

如果此值大于0,线程池会将一个连接上接收的消息串行化。

name.ThreadIdleTime

线程池中的线程终结前,必须达到的空闲时间。默认值60秒。设置为0时,线程不会终结。

 

客户端线程池和服务器线程池的属性名分别为

Ice.ThreadPool.Client,Ice.ThreadPool.Server,例如:

Ice.ThreadPool.Client.Size=1

Ice.ThreadPool.Client.SizeMax=10

Ice.ThreadPool.Server.Size=1

Ice.ThreadPool.Server.SizeMax=10

想要监视线程池的活动,可以使能 Ice.Trace.ThreadPool。当线程池增加或减小的时候,将会打印日志。

 

动态线程池

动态线程池可以根据程序的运行情况,动态的增大或者减小。通过下边几个例子,来进行说明。

name.SizeMax=5 

这个线程池,初始有一个线程,因为name.Size的默认值为1,最多可以有5个线程。当线程空闲60秒后会终结,直到线程池中剩下一个线程为止。

name.Size=3
name.SizeMax=5 

此线程池初始有三个线程,其他和上面的线程行为一致。当空闲时,线程池依然会减小到一个线程。

name.Size=3
name.ThreadIdleTime=10 

线程池初始有三个线程,当线程空闲时,会迅速的减小(10秒空闲)。他的最大线程数也为3name.SizeMax默认为name.Size的值。

name.SizeMax=5
name.ThreadIdleTime=0 

此线程池初始一个线程,最大五个线程,但此线程池不会减小,因为ThreadIdleTime被设为0

name.Size=5
name.ThreadIdleTime=0 

此线程池初始五个线程,最大也是五个线程,不能增加也不能减小

 

将线程池配置为多线程,可以让ICE并发处理请求和异步回调。尽管,设计一个线程安全的程序需要付出更多的努力,但这可以提高程序的可扩展性和吞吐量。

想要合理的配置线程池,需要对程序做仔细的分析。比如,对一个运算密集型的程序,最好将他的线程设置为CPU核心数,如果线程数大于核心数的话,就会因为上下文切换的增加而影响性能。线程数增加,可以提高服务器的响应性,但如果有太多线程时,可能会产生相反的效果,反而使服务器响应降低。具体还是需要在真实的运行环境下进行实验。

你可能感兴趣的:(ICE)