线程池技术在路灯监控软件中的应用
路灯作为现代城市的基础设施,在城市的日常运作和人们的生活中起着重要作用,路灯系统的先进程度标志着一座城市的现代化水平。路灯控制系统能够及时准确的统计路灯设备的运行情况和亮灯情况,将路灯故障或线路断线的报警信号送到监控中心,远程管理和设置亮灯时间策略及调光规则,做到合理亮灯和按需亮灯,从而能够实现真正的路灯管理的“五遥(遥测、遥控、遥信、遥调、遥视)。通信服务器作为路灯监控系统中的重要组成部分,负责与监控操作的客户端以及道路两旁的多台远程路灯集中控制器进行数据通信、数据处理。通信服务器必须能够保证长时间的为大量监控终端软件和路灯集中控制器提供稳定的通信服务。
路灯系统结构图在一般的并发服务器架构中,一个单独的线程等待客户端的连接请求,当有请求到来时该线程创建一个新的服务线程来进行处理,在新线程创建完毕后主线程再回复至等待请求状态。但面对大量的客户端连在整个系统中,通信服务器固定IP地址,并提供两个端口号。通信服务器通过Intemet/GPRS网络与路灯集中控制器通信,接收路灯系统的实时运行情况,存入数据库,必要时向用户监控端转发,另外通信服务器通过Internet网络与用户客户端相连,接收它的控制命令,并向路灯集中控制器转发。
2C/S通信模型与线程池的工作原理在管理中心和服务器以及路灯集中控制器和服务器间的网络通信模式采用的都是常见的C/S模式,即客户端/服务器通信模式。在C/S结构下,服务器程序通常在一个固定的地址监听客户端的请求,客户端和服务器通过TCP协议建立数据传输,服务器进程通常情况下处于“休眠”状态,直到客户端对该服务器发出连接请求,将其“唤醒”。此时,服务线程“醒来”并对客户端的请求做出适当的反应。客户端总是主动的请求启动通信,而服务器一直等待被动通信。这种请求/应答的过程如所示。
线程池是一种管理一定数量线程的手段。线程池中的线程数量是由运行时机器容量负载的配置信息以及动态信息决定的。
线程池的基本思想是在程序开始时就在内存中开辟一些线程,形成一个预派生的线程池,同时创建一个任务队列气当有新的客户端请求到达时,将新连接的请求任务首先投递到任务队列,从“线程池”中选择一个空闲的线程为新的客户端请求服务,服务完毕后,线程不是退出,而是进入空闲线程池中。通过对多个任务重用已经存在的线程对象,降低了对线程对象创建和销毁的开销。当客户端请求时,线程对象已经存在,可以提高请求的响应时间,从而整体地提高了系统服务程如下:绑定本地的服务知名端口。
以监听套接口为参数创建多个服务线程,主线程休眠。
月艮务线程的流程如下:接受外来连接请求,accept函数返回服务套接口。
处理客户端服务的请求,关闭服务套接口,并返回步骤(1)。
3服务器端软件的设计与实现3.1月艮务器端软件的设计思路在服务器程序中主要包括两个线程,主线程和工作者线程,主线程主要负责监听客户端的连接,接收到新的连接后,将新套接字安排给工作线程进行处理。先创建几个并行的工作者线程,一般这个数目为CPU的个数,它们为即将到的客户端连接提供服务。当有一个新的服务连接请求,则取出一个工作者线程为它提供服务,如果没有空闲的工作者线程,则将这个新的套接字连接加入到任务队列中,该队列采用先进先出的(FIFO)的策略来保证对后续未能得到及时服务的连接请求得到公平的服务。另外采用先进先出的策略可以减少CPU在不同线程间的切换次数,降低线程上下文切换带来的系统开销。
程序用下面的CONNCTX结构来记录每个客户端套接字的信息,用THREADOB结构来记录每个工作者线程的信息,它们的关系如所示。
每接收到一个新的连接,就会为这个新的连接创建一个该结构并初始化该结构的内部成员。当连接关闭或者出错时,就释放该客户端连接对应CONNCTX结构对象所占用的内存,以免造成内存的泄露。
句柄的表现。
一个较为简单的基于线程池模型的服务器程序流每创建一个工作者线程,便为该线程申请一个THREADOB结构并初始化该结构中的成员,当这个工作者线程关闭时,再释放它所对应的THREADOB结构对象所占用的内存空间,并且将定义一个gpThi'eadList来指向该线程对象链表的表头。tvpedefstruct数量套接字对象列表的表头接字对象列表的表尾//指向下一个THREADOB对象,以形成表线程对象和套接字对象间的关系主线程程序主要创建监听套接字、初始化全局变量、创建线程池,将新到来的客户端连接加入到客户端的连接列表中,等空闲的工作线程的处理。主框架代码如下://变量的声明及其初始化//创建监听套接字//绑定本地地址到监听套接字//处理客户端的连接请求while(TRUE)//循环处理所有未决的连接请求//将一个套接字对象安排给空闲的工作线程处理该线程运行后,取得本线程对象的指针,进入无限循环并在events数组所记录的事件对象上等待,处理网络事件,工作线程的框架代码如下:理网络事件//信息的处理与存睹4服务器端软件的仿真测试线程池模型相付于多线程来说。服务器对大呈并发客户端的连接请求拥有更快的响应速度。为r测试此基于线程池技术的服务器端软汴的响应速度。编写了多线程的服务器软件和能够对服务器不断的发起并发连接的客户端软件,做如下仿真压力测试:服务器的硬件环境为Intel)2DuoCPU,2.93GHz,2G内存;服务器分别运丨7基于线程池技术和多线技术的服务器端软件,通过分析它们各自占用的物理内存使用情况和客户端一次连接成功率来对服务器端软件进行分析。具体的测试结果如表丨所示:表1服务器软件测试比较服务器软件版本线程池模M多线程模型客户端数物理内存使币/M客户端一次连接成功率/%从表I可以看出。多线技术由十预先刨建线等待客P端的连接请求,它的客户端一次连接明显高十多线模坳。H随着客户端的多。多线模型的客户端一次连接率在下降,而线程池漠型相对来说较为稳定另外由于线程池模型减少了CPU在线程上下文之间的切换次数。而多线程池模型在大量新的客户端连接时需要大量的创建新的线程和销毁线程。因此线程池模型比多线程模型的物理内存占用M要少。更能节约系统资源2008环境为开发环境,以
- 上一篇:风光互补LED路灯照明系统设计 2016/8/16
- 下一篇:基于电力线载波通信的LED路灯能源监控网研究 2016/8/16