线程池调度对服务器性能影响的研究*

2019-10-09 05:22
通信技术 2019年9期
关键词:临界点管理器正态分布

彭 华

(中国电子科技集团公司第三十研究所,四川 成都 610041)

0 引 言

随着网络和信息安全技术的快速发展,每天有数以万计的用户在不断访问各类大型网站,服务器需要并发处理大量的用户连接请求。如何使服务器在面对大量访问请求时仍能应付自如,成为需要迫切解决的问题。在服务器的网络处理能力设计时,通常采用多路复用I/O机制加线程池技术实现[1]。

但是,大量访问请求产生的网络连接可能导致频繁的线程调度,从而消耗大量的系统额外时间,或者导致调度不及时,导致连接请求没有及时响应和处理,最终导致线程池技术没有发挥出预期的性能。如何设计服务器的线程池调度算法使其能够尽可能发挥线程池的效能,是一个需要重点解决的问题。

1 线程池技术

1.1 采用线程池技术的原因

创建和销毁线程很费时,因为创建一个线程要获取内存资源或者其他更多资源。因此,提高效率的一个手段是尽可能减少创建和销毁对象的次数,特别是一些耗资源的对象创建和销毁。为了节省对象创建和销毁所产生的系统时间,需要准备一个容器用来保存一批这样的对象。当需要使用这种对象时,不再需要每次去创建,而是直接从容器中取出现成的直接使用。由于节省了创建和销毁对象所需的开销,程序性能得以提升,而存放和管理这些线程对象的容器就是线程池[2]。

1.2 线程池的组成

如图1所示,一般简单线程池至少由以下3部分组成[2]。

图1 线程池组成结构

线程池管理器:也称为主控线程,用于创建和管理线程池中的工作线程,定时对任务队列扫描、清理过期未提交工作线程执行的积压数据。

工作线程:用于任务处理的独立单元,并根据系统初始设定创建其数量,繁忙时会动态创建新工作线程。

任务队列:提供一种缓冲机制用于存放等待处理的任务,工作线程根据相应的原则从任务队列中获取数据处理。

1.3 线程池的工作原理

线程池采用预创建的技术,在应用程序启动后,将立即创建一定数量的线程(N)放入空闲队列中。这些线程处于阻塞状态,不消耗CPU,但占用较小的内存空间。

线程池中线程的数目是动态调整的。当任务到来后将其存入任务队列,线程池管理器选择一个空闲线程,把任务传入此线程中运行。当线程池中的所有线程都处于繁忙状态时,线程池自动创建新线程处理更多的任务;当线程池比较空闲时,线程池销毁一部分空闲线程,释放系统资源,只保留初始创建的N个线程[2]。

1.4 线程池的优点

(1)可以控制产生线程的数量。通过预先创建一定数量的工作线程并限制其数量,控制线程对象的内存消耗[3]。

(2)降低系统开销和资源消耗[3]。通过对多个请求重用线程,线程创建、销毁的开销被分摊到多个请求上。另外,通过限制线程数量,降低线程池在垃圾回收方面的开销。

(3)提高系统响应速度。线程事先已被创建,任务到达时可直接进行处理,消除了因线程创建所带来的时间延迟。另外,多个线程可以并发处理[3]。

1.5 线程池调度的作用

线程池技术解决了服务器多个线程执行的调试问题,可以使处理器尽量保持忙碌状态,充分利用系统的可用资源,显著提高系统性能。但是,如果线程池调度策略设计不当也会事与愿违[4]。

2 线程池调度实验设计

可以通过以下2个实验测试线程池调度策略的参数取值对服务器性能和资源占用的影响。

2.1 实验一

假设并发用户连接总数为T,线程池初始线程数N,每个线程处理最多M个用户连接。当有用户连接请求时,线程池会随机选择一个线程对该连接请求进行处理。线程繁忙临界点设为P(0%

如图2所示,当某一个工作线程的用户连接数X=0时,说明该线程处于空状态;当用户连接数X

图2 工作线程的运行状态

线程池调度周期为t,当所有工作线程处于忙状态时,线程池管理器会新创建一个线程并加入线程池。

以T=20 000、N=4、M=2 000、t=1 s为例,测试线程繁忙临界点P在不同取值下的访问完成时间和线程总数。

2.2 实验二

根据概率论与统计学原理,自然界很多看似没有规律可寻的随机事件其实服从正态分布[5]。

正态分布是一种自然分布,有极其广泛的应用背景。在生产和科学实验中,很多随机变量的概率分布都可以近似用正态分布来表示。

如图3所示,正态分布有2个参数,即期望值和标准差,可记作N(μ,σ)。

图3 正态分布

正态分布有如下特性:

假设在用户访问服务器的高峰时间段,用户访问总数为50万,用户访问数量服从正态分布,如表1所示。

表1 高峰时间段访问服务器的用户数

测试线程繁忙临界点P在取值30、60和90的情况下,高峰时段在各时间点的用户完成数和耗时。

3 实验结果和分析

实验利用线程池方式实现的服务器做性能测试分析。服务器CPU为Intel Xeon 2.10 GHz双核,内存64 GB,操作系统Fedora Core 14。实验一的测试结果如表2所示。

表2 临界点P对完成时间和线程数的影响

将表2中的临界点P在不同取值下的完成时间转换为图4,将表2中的临界点P在不同取值下的处理线程数转换为图5。

图4 临界点P在不同取值下的完成时间对比

图5 临界点P在不同取值下的线程数对比

综合图4和图5可见,随着临界点P值的增大,用户连接处理不及时的概率增加,导致用户连接处理完成时间变长,降低了网络服务器的性能。但是,如果临界点P值设置过小,会在线程还未饱和的情况下提前创建新线程,导致线程数量增加,造成系统资源浪费。

实验二的测试结果,如图6、图7所示。

分析图6可知,在用户访问的高峰时间段,随着临界点P值的增大,服务器对高峰期用户访问请求的响应速度变慢,未及时处理的用户访问请求会被延迟到高峰期后处理。

分析图7可知,在用户访问的高峰时间段,随着临界点P值的增大,对高峰期用户访问请求的处理耗时会随着用户数的增加而增大,一旦到达服务器的处理极限后,会保持相同的处理耗时。结合图6的分析可知,由于未及时处理的用户访问请求被延迟,所以处理耗时的下降拐点随着临界点P值的增大而延后。

图6 临界点P在不同取值下的用户完成数对比

图7 临界点P在不同取值下的处理耗时对比

综上所述,线程池模型主要是通过线程池管理器对线程池进行并发调度。线程池管理器主要通过各个工作线程的负载情况和任务的优先级别调度任务,使得线程池工作更加灵活,处理任务更加及时、高效。但是,由于线程池的工作调度依赖于线程池管理器调度算法,所以线程池性能主要受到调度策略和调度参数的影响[6]。因此,不同的服务器需要根据应用场景寻找最优的线程池调度方案,使服务器性能与资源消耗达到平衡。

4 结 语

线程池技术为线程创建销毁的开销问题和系统资源不足的问题提供了一个较好的解决方案,尤其适用于大量用户访问请求的服务器应用[7]。但是,要使线程池的处理效率更高,对线程池的调度是一个要考虑的问题,且调度策略和调度参数要根据实际应用场景来设定。只有合理的线程池调度,才能发挥出线程池技术在服务器应用中的最大效能。

猜你喜欢
临界点管理器正态分布
关于n维正态分布线性函数服从正态分布的证明*
启动Windows11任务管理器的几种方法
应急状态启动磁盘管理器
生活常态模式
Windows文件缓冲处理技术概述
超越生命的临界点
正态分布及其应用
在Win 7下利用凭据管理器提高访问速度等
高考正态分布问题例析