漆 艺
(四川广播电视大学,四川 成都 610000)
国家开放大学期末考试是全国性的统一考试,其重要性不言而喻。由于办学性质的特殊性,每年的6月和12月,由国家开放大学统一安排,各分部安排合适场地,组织进行期末考试。以四川分部为例,全省范围内共有150多个考点。为了加强考风考纪的建设,打击违规替考等不正之风,需要在进入考场之前,对考生进行“实人+实名+实证”的验证。而传统的人工核验易受到人为因素干扰,且无法防止证件作假的情况,由此背景下,亟需设计一套考场身份认证系统,辅助考场规范管理,严肃考风考纪。
由于考试入场事件集中在考前30至15分钟,因此在这段时间内,首先需要系统在响应规模、并发处理能力、数据交互量,以及自身资源消耗等方面,有较高要求。其次,为了方便扩充和演进,系统最好是“scalable”系统,即通过提升硬件能力(增加内存或CPU数量)而达到提升性能的目的。
在计算机系统中,设备I/O相对于其他操作是比较慢的,于是在多线程结构中通常采用异步I/O的方式进行设备I/O操作。从本质上讲,重叠I/O模型也是一种异步I/O模型,它的核心是一个重叠数据结构:
typedef struct _OVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;
从Winsock 2开始,重叠I/O便集成到了新的WinSock函数中。通过使用重叠结构,应用程序可以一次投递一个或多个异步I/O请求。要想在一个套接字上使用重叠I/O模型来处理网络数据通信,必须使用WSA_FLAG_OVERLAPPED这个标志来创建套接字。如下所示:
WSASocket(AF_INET,SOCK_STEAM,0,NULL,0 WSA_FLAG_OVERLAPPED);
应用程序有多种方法获取重叠I/O请求操作完成的通知,如等待事件对象置信,或使用完成例程等,但它们都有一个共同的缺点,即为每一个I/O都开了一个线程,当同时有成千上万个请求发生时,系统会深陷于线程上下文切换的泥潭里。……