02 2011 档案
LuaVM Remote Debugger
摘要: 基于Lua 5.1实现的远程调试器,脚本运行在服务端,客户端登录后可以远程管理脚本,可以调试脚本,单步跟进、变量查看。
界面基于wxWidgets实现,网络通讯接口采用CORBA/TAO。
阅读全文
posted @
2011-02-28 16:23 风雷九州 阅读(1943) |
评论 (2) 编辑
一个基于ACE的负载自适应万能线程池实现
摘要: 在C++中要进行并发处理,不可避免要使用多线程,在传统的教科书中,大家都是采用最原始的多线程技术,应用逻辑和线程并发策略紧密绑定。
在一个典型的服务器程序中,客户端的请求往往包含了很多不同的逻辑命令,如在一个线程处理函数中,需要根据客户端的命令代码处理不同的业务逻辑:
int thrad_main(int cmd_id,char *data){
switch(cmd_id)
{
case 1:
...
break;
case 2:
...
break;
}
}
如此这般,业务处理逻辑和线程逻辑紧密耦合,这是一种很“丑陋”的代码。
如何通过一种优雅的方法,分离并发逻辑和业务逻辑,通过通用的并发框架,业务逻辑设计者只需要关心自己的逻辑代码,交给“线程池”去处理即可,而不需要去关心如何创建线程,等待线程结果这些琐碎的“小事”?
阅读全文
posted @
2011-02-28 15:46 风雷九州 阅读(4249) |
评论 (3) 编辑
一个简单的PostgreSQL数据库连接池实现
摘要: 平台服务和脚本服务接口对后端PostgreSQL数据库的使用目前采用短暂连接方式,造成多次调用服务时频繁连接和断开数据库,效率很低。
如果共享数据库连接,则会造成多线程访问数据库时的事务冲突,故必须采用连接池来管理对数据库的并发访问,某一线程连接到数据库使用完毕后,不断开数据库连接,而是把连接归还给连接池。
另一线程访问数据库时会首先向连接池申请已经存在的连接,如果连接池中没有空闲连接,或者申请到得连接已经超时失效,再建立新的连接,使用完毕后同样归还到连接池。
这样连接池中的连接数会随着线程压力的增加逐渐增长,直到所有的线程同时工作,达到最多连接数。
由于一个线程可能同时申请多个连接,故连接数可能会大于线程数。连接池在程序结束时销毁全部连接,或者线程在申请到的某一连接失效时销毁该连接。
阅读全文
posted @
2011-02-28 13:57 风雷九州 阅读(5699) |
评论 (0) 编辑
CORBA/TAO使用手记1 -- C/S架构网络通信开发
摘要: 在C/S结构的C++网络程序中,直接采用Socket API进行开发效率是很低的,所以大家发明了各种各样的网络框架,如Boost.Aiso和ACE,简化了网络通信开发的难度。
但是这种基于数据包收发的模式还是不太方便,于是又出现了RPC、DCOM、CORBA等远程接口调用的标准。客户端只需要像调用本地函数一样调用远程接口,框架会自动处理数据包收发,请求和应答等底层细节。
虽然现在Web技术的发展如火如荼,大有取代C/S架构应用之势,但是,直接运行于操作系统平台上的C++原生应用还是有它存在的意义,最主要的方面就是接近系统底层,对操作系统资源和底层设备的控制等,其他任何虚拟机上的中间语言是无法望其项背的。
CORBA是一个为简化跨平台应用而提出的规范,它独立于网络协议、编程语言和软硬件平台,支持异构的分布式计算环境和不同编程语言间的对象重用。
阅读全文
posted @
2011-02-16 19:54 风雷九州 阅读(3861) |
评论 (0) 编辑