基于线程池的高并发访问考试系统设计
2013-10-17许永达
许永达
(1.湛江师范学院信息与教育技术中心,广东 湛江 524048;2.重庆大学,重庆 400044)
0 引言
随着计算机的不断普及,计算机技术和网络技术的迅速发展,大规模数据库的建立和维护日趋成熟,计算机考试已成为当今高校考试的重要方式[1]。
现有考试系统,如果考生的数量相当大,同时访问服务器时就会产生海量数据的情况,例如大量考生同时生成试卷或者同时交卷,就会引发服务器响应缓慢甚至崩溃,导致考试无法正常进行[2]。
为了实现服务器的高效并发访问,多线程技术是优秀的解决方案。目前,主要有两种模型:线程-请求模型和线程池模型。考试系统的考生生成试卷、保存试卷、交卷等操作的特点是时间短暂,单个请求的数据量不大,但是多个请求的数量巨大且频繁发生。线程-请求模型会为每个请求创建一个线程,完成后销毁,当线程被频繁创建和销毁,系统效率就会非常低;线程池模型会预先创建一定数量的线程,每个线程处理完用户请求后状态改回空闲,以响应新的请求,这样就避免了线程创建和销毁的开销,加快了系统响应时间[3]。
因此,线程池技术可高效地解决考试系统中海量数据同时访问服务器时效率低下的问题,并进一步提高了考试系统的性能。本文介绍基于线程池的高并发访问考试系统的设计框架、主要功能及工作流程和线程池模块的设计。
1 基于线程池的高并发访问考试系统设计
1.1 线程池技术
线程池技术的原理是:服务器在初始化阶段,创建一定数量的线程放入到线程池中,让这些线程处于空闲状态,当客户端请求到来时,调用一个线程去处理客户端的连接请求,任务完成后,线程状态改回空闲,等待下一次任务的调用。
线程池可分为线程数量固定和线程数量可动态变化两种类型。
(1)线程数量固定的线程池,线程池在创建后,线程的数量不再变化。此类线程池在ATM机上取款操作等性能相对比较稳定的场景应用较多。然而其弊端也是显而易见的,如果系统负载突然加大,就可能出现无空闲线程可调度的情况,新请求到来时只能等待;如果系统负载较小,就会有大量的线程空闲,浪费系统资源。
(2)线程数量可动态变化的线程池,其线程的数量随负载变化而变化。如果系统负载加大到无空闲线程可调度时,线程池会按照一定的算法增加线程数量。但线程数量不会无限增加,其上限会根据系统性能而定。当系统空闲时,线程池会销毁部分空闲线程,释放系统资源,使系统保持高效运行[4]。
1.2 系统总体框架设计
基于线程池的高并发访问考试系统通过使用B/S三层结构进行设计,采用动态变化的线程池控制业务逻辑层对数据访问层的操作,采用分考场的监考机分担考生端对总服务器访问的负载,实现考试系统的高并发、稳定运行。系统的总体框架设计如图1所示。
图1 考试系统框架
1.3 系统主要功能及工作流程
基于线程池的高并发访问考试系统根据B/S模式设计为三层:用户界面层、业务逻辑层、数据访问层。在业务逻辑层和数据访问层之间新增了线程池,控制此二层之间的通信。
(1)用户界面层:共有教务员、管理员、监考员、考生、教师5个界面,用户在系统主界面输入正确的帐号密码后,系统根据用户的权限,打开相应的界面。
(2)业务逻辑层:用于实现考试系统的主要功能,包括考生信息管理、教师信息管理等模块,如图1所示。下面将详细介绍此层各模块的主要功能:
①考生信息管理、教师信息管理和考场信息管理:可直接从Excel电子表格中导入考生、教师、考场信息,也可在管理界面添加数据。以上数据及考试结束后在考生信息管理中生成的考试成绩,可导出为Excel,方便教师管理和共享。
②考场安排:系统将根据考生、教师、考场信息自动安排考场中的考生座位、监考老师,之后教师可根据需要再调整。
③考卷管理:教师登录系统后,进入考卷管理,其功能有试题录入、编辑、浏览,试题参数设定,组卷策略设定。试题参数主要有知识点、题型、难度、重要度。组卷策略主要有知识点范围、题型、难度范围、题目分值、题数[5]。
④智能组卷:该模块应用了遗传算法,将根据试题参数和组卷策略自动生成试卷,教师可根据需要再调整试卷内容[6]。
⑤监考下载试卷:开考前半小时,监考员可登录到考试系统,下载试卷到相应考场的监考机和备用监考机,启动考场考试。
⑥考生下载试卷,考生答题:当监考员启动考试,考生登录成功后,考生将从考场监考机下载试卷,开始答题。考试界面有计时提示。
⑦答卷同步:考生每完成一道题,答卷数据都自动同步到监考机和备用监考机。若考生机发生故障,考生可更换机器,从监考机下载其已作答的考试数据,计时从中断处开始计算,并补时5分钟。
⑧考生交卷:考试开始半小时后考生可交卷,若考试时间到,系统将自动收卷。
⑨考卷上传:考试结束后,监考员收集所有答卷,校验考试数据,然后上传答卷数据及考试情况到总服务器。
⑩客观题评分:系统将自动完成单选、多选、填空题的评分,且填空题可具有多个备选答案[7]。
⑪主观题评分:系统将自动完成计算题、编程题、简答题的评分,且抽样15%由教师评分,若人工评分与机器评分误差不大,则评分完成,若误差过大,则修改试卷答案,重复上述步骤,若误差仍过大,则此题型改由人工评分[8-9]。
⑫考生成绩管理:综合主观题和客观题的分数生成考生成绩,并保存在考生信息中。然后,考生可登录系统查成绩,对成绩有异议可申请复评[10]。
总的来说:监考机从总服务器下载试卷后,考生从监考机下载试卷,同步答题,交卷到监考机,再由监考机上传试卷到总服务器,而不是让考生机直接访问总服务器,提高了考试系统的响应速度和并发处理能力。
(3)线程池:业务逻辑层的用户登录、监考下载试卷、考生下载试卷、答卷同步、考生交卷、考卷上传的操作,通过线程池的控制高效地访问数据访问层,其设计将在1.4节中进行详细阐述。
(4)数据访问层:根据业务逻辑层的请求,对数据库中的考生、教师等数据表进行操作。
1.4 线程池模块的设计
本考试系统采用的线程池是一种基于任务队列的可扩展线程池,它根据任务的优先级和先后顺序处理任务,它的线程数可根据任务的数量动态变化。线程池运行的流程图如图2所示。
图2 线程池运行流程图
基于任务队列的可扩展线程池,由主线程、任务队列、线程池、管理线程组成,其中线程池包括主线程池、扩展线程池。
(1)主线程负责监听多路客户端的请求,当客户端的请求到达后,将按照客户请求的类型放到相应的任务队列的队尾,并通知唤醒管理线程[11]。
(2)任务队列,其中一共有6种不同类型的队列,按优先级由高到低排列如下:用户登录队列、监考下载试卷队列、考生下载试卷队列、考生交卷队列、答卷同步队列、考卷上传队列。同一队列中的任务按照先进先出(FIFO)原则出队。
(3)线程池包括主线程池和扩展线程池两部份,由于线程池大小随着任务数量而动态变化,所以选用链表作为线程池的数据结构。
(4)主线程池是考试系统初始化时就创建的具有固定数量线程的线程池,其线程在系统运行过程不会被销毁。在线程池初始化时,可以使用内存池来分配一整块内存给线程池链表,内存的大小由主线程池中的线程数量决定,而线程数量由系统规模决定。主线程池中的线程将位于线程池链表的前端,这样当请求到来时,它们将被优先选择来处理请求。
(5)扩展线程池是线程池链表中除了主线程池的那部分链表。当线程池中已没有空闲线程,而任务队列非空时,就需要创建数量与任务队列中所有等待处理的任务总数相同的扩展线程,放到线程池链表的末端,并选用其中的扩展线程来处理任务。扩展线程数量的上限由系统性能决定,若已到达上限且线程池中无空闲线程,任务队列中未处理的任务只能等待。每个扩展线程都有一个计时器,从线程被创建时开始计时。当扩展线程在设定的时间阈值内接受了任务,计时器就会停止计时。当任务完成后,计时器重新开始计时。
(6)管理线程负责调度空闲线程处理任务及创建、销毁扩展线程。如果任务队列非空,管理线程就会在线程池链表中按照从前端到末端的顺序查找是否有空闲的线程。如果有空闲线程,管理线程会按照任务队列的优先级由高到低、同一队列中从队首至队尾的顺序,把符合条件的任务进行出队处理,让此空闲线程处理此任务并改变此空闲线程的状态,任务完成后,再把状态改为空闲;如果没有空闲线程,且扩展线程的数量没有超过上限,就按照扩展线程池的说明中提到的算法创建扩展线程;如果任务队列为空,管理线程就会遍历扩展线程池,如果存在空闲的时间超过时间阈值的扩展线程,就将这些扩展线程销毁[12-13]。
在本系统中设计的线程池的数据结构定义如下:
2 结束语
本文介绍了基于线程池的高并发访问考试系统的设计框架,主要功能及工作流程和线程池模块的设计。该考试系统采取了基于任务队列的可扩展线程池控制业务逻辑层对数据访问层的操作,分考场的监考机分担考生端对总服务器访问的负载等措施,实现了考生机对考试系统的高并发访问。
[1]韩雪娜,关绍云.谈高校无纸化考试[J].教育探索,2009(11):67-68.
[2]袁冰,杨枨.基于考试任务的分布式考试系统设计[J].计算机工程与设计,2011,32(10):3530-3533.
[3]孙旭东,韩江洪,刘征宇,等.基于分段的线程池尺寸自适应调整算法[J].计算机工程,2011,37(2):43-47.
[4]王俊峰,谢冬青.基于线程池技术集群接入点的应用研究[J].微计算机信息,2009(24):133-135.
[5]刘智浓.航空兵部队航理智能组卷系统设计[J].计算机工程与设计,2010,31(19):4329-4335.
[6]吴美娟,黄烟波,刘中宇.基于改进遗传算法的智能组卷系统研究[J].计算机应用与软件,2007,24(12):192-193.
[7]郭新顺,郑戟明.具有多个备选答案的客观题自动阅卷系统设计[J].电脑编程技巧与维护,2009(14):118-121.
[8]李旗.在线考试主观题自动评阅算法分析与设计[J].梧州学院学报,2010,20(6):44-50.
[9]田甜,张振国.主观题自动阅卷技术研究[J].计算机工程与设计,2010,31(16):3697-3699.
[10]王伟东.一种无纸化考评系统的设计与实现[D].重庆:重庆大学,2008.
[11]刘新强,曾兵义.用线程池解决服务器并发请求的方案设计[J].现代电子技术,2011,34(15):141-143.
[12]宋立昊.基于线程池的Web服务器实现和监测[D].吉林:吉林大学,2011.
[13]杨开杰,刘秋菊,徐汀荣.线程池的多线程并发控制技术研究[J].计算机应用与软件,2010,27(1):168-170.