APP下载

多线程技术在缴费易系统中的应用

2011-02-17李小明广东省邮政信息技术局广东广州510006

中国科技信息 2011年15期
关键词:空闲充值线程

李小明 广东省邮政信息技术局,广东 广州 510006

多线程技术在缴费易系统中的应用

李小明 广东省邮政信息技术局,广东 广州 510006

介绍了在linux平台下c语言实现的一种线程池,并在缴费易电信充值异常处理中的得到应用。使用该线程池可以动态创建管理线程,空闲时回收资源。在电信充值异常处理的过程中起到了关键的作用。

电信充值;多线程;并发访问

1.进程与线程

电信充值异常处理的过程中使用到了多进程和多线程。使用子进程负责处理主要逻辑并在子进程中创建多个线程,每个线程负责处理单独的异常逻辑。在主进程中监控管理子进程。

进程是系统进行资源分配和调度的最小单位。进程创建通常调用fork实现。创建后子进程和父进程指向同一内存区域,当子进程有写动作发生时,会把变动的区域拷贝到子进程新的地址空间,这样可以在很大程度上提高创建进程的速度。

当运行一个程序时就相当于启动了一个独立进程。单CPU系统同时运行多个进程,需要使用并发技术,一般采用“时间片轮转进程调度算法”,核心思想为:所有运行的进程轮流使用CPU,但每个进程允许独占CPU的时间很短,足以让用户感觉不出来CPU是在轮流为多个进程服务。但实际上在任意时间点有且仅有一个进程独占有CPU。如果是多个CPU的系统,多个进程就是可以真正的同时运行。

线程是进程的一个实体,是CPU分配和调度的最小单位。线程基本上不拥有系统资源。多线程可以使多个线程并行的工作以完成一个业务逻辑单元,这样可以有效的提高系统效率。

交费易系统设计实现中面临业务逻辑比较复杂、业务数据量比较大、对数据实时处理性能要求比较高、对健壮性和安全性要求比较高、要求系统跨平台,因此设计过程中采用了以业务逻辑单元来划分进程。一个独立的业务逻辑可以用一个单独的进程来运行管理。因此,将电信充值异常处理单独设计成一个独立进程来完成业务逻辑。

由于异常情况常常无法预料并且时有发生故需要频繁创建销毁线程来处理,这样在一定程度上会消耗更多系统资源,导致效率不高,因此采用提前创建需要数量的线程并使用线程池来管理线程。

在业务处理过程中需要和第三方交费易通信,包括发送、接收报文、加密解密、验证有效性等。进程间通讯使用套接字,这是由于使用Socket可以有效地支持分布式部署,而且可以在多种编程语言上比较容易地实现。

2.线程池设计与实现

线程池的设计主要包括:首先在应用开始执行时从配置文件读取线程池的大小,创建并初始化线程池,将程序处理过程关键信息记录到日志中。然后,创建一个调度函数,当有新任务时创建或调度一个线程完成业务逻辑,当线程池中线程数小于最大线程数并且无闲置线程时则创建新线程,否则使用或等待有空闲线程处理。使用线程条件锁pthread_cond_t和线程互斥锁pthread_mutex_t对线程池进行管理。当所有线程都被占用时加锁等待直到有空闲线程才使用空闲线程处理。最后,在使用完一个线程后放入线程池中等待继续使用,并使用 pthread_cond_signal唤醒等待线程。当发生异常或中断时等待所有线程处理完毕后回收线程占用的资源。

3.充值异常处理逻辑分析

充值中如出现第三方返回超时则记录订单状态为超时,并由后台异常处理程序在独立线程中以socket短连接的方式给第三方发送冲正申请查询交易,如果返回成功则根据返回结果更新订单状态,如果超时无返回,则记录该订单为待冲正状态,并由后台冲正程序向第三方发起冲正交易。

4.将线程池应用到充值异常处理中

根据线程池的设计可以在线程创建函数里调用充值异常处理函数,此函数主要包括:数据库读写操作,socket通信等。数据库操作主要包括:打开、关闭数据库连接;读取,修改订单状态;根据第三方返回值回滚额度;记录日志及流水等。socket通信主要包括:按协议组装发送报文及接收分解报文。

5.结语

该线程池在电信业务异常处理的应用中通过在多并发,大数据量,持续性等验证中表现稳定,为以后的项目提供了借鉴和参考的作用。

[1]郑燕飞,余海燕. Linux 得多线程机制探讨与实践[J].计算机应用.2001

[2]周丽等.LINUX系统下多线程与多进程性能分析.微计算机信息.2005

[3]王枫,罗家融.Linux 下多线程Socket 通讯的研究与应用[J].计算机工程与应用.2004

参考文献

[1]冼土明等.基于ZigBee-GPRS 技术的无线传感网络[J].软件2011第32卷第1期:58-60

李小明(1981年04月),男,陕西汉中,软件开发工程师,研究方向:分布式应用、应用系统架构设计开发。

10.3969/j.issn.1001-8972.2011.15.052

猜你喜欢

空闲充值线程
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
“鸟”字谜
西湾村采风
彪悍的“宠”生,不需要解释
基于NFC的ETC卡空中充值服务应用系统实现
WLAN和LTE交通规则
将废旧电影卡充值后销售的行为定性
苏通卡手机充值系统研究