用indy tcp+mydac写的服务端程序,mysql数据库,访问人数达到2K左右时就会卡死,一直没有找到解决方法,请高手不吝赐教,数据库配置优化,程序代码优化等等 用Indy肯定是不行的,这个问题我研究了很长的时间: 1.采用IOCP或者线程池技术 2.后台线程处理处理界面交互,多用SendMessage和SendThreadMessage来处理; 一种方法是修改创建线程时的堆栈参数, 默认是1m,那么最多开2k线程啥事不干光是堆栈保留就可以把2g用户地址空间耗光,最小堆栈可以设置为64k,这样就可以有上万的线程了。 还有一种就是啥也不改,多买几台机器每台机器同时多开几个程序在多个端口服务,应该也不错。 用iocp来处理也确实不错,不过明显开发难度要上一个档次,iocp是绑死在nt上的技术,可移植性远不如用indy好。 -------- |
|