我的Windows下的服务器现在只能带900人,CPU就100%。
   客户极其不满,要求2000人。
   Compaq 服务器,双CPU(自强)、1G内存、SCSI硬盘(基本是顶级配置)。
   而且,别人已经可以带1500人。实在令人痛苦。仔细研究,怀疑在以下情况
需要优化,想看看大侠门的看法:
   1、是否程序中应当加入些Sleep语句,让CPU降降温;否则,CPU总是出现
100%??????
   2、内存中查找到底对CPU负载造成多大影响。900个线程,每次来个请求,
就要查找1~10次,但是,全部在内存中?????
   3、工作线程和用户线程会有很大的差别吗?我用的是用户线程,但,其实
只需工作线程即可。
   4、ZLIB压缩对CPU压力有多大???我每个大包都用了ZLIB压缩。
   5、多线程是提前把2000个开好,作为线程池用;还是来一路连接就为
用户分配一个线程好???????我用的是后者,来一个,分一个;走了
断开,来了又重新分配。

解决方案 »

  1.   

    硬件绝对可以胜任,问题在软件。1.用线程池技术。2.你是网络服务程序吗?那么你的SOCKET的I/O模型是采用什么模型?你这种情况应该用完成端口I/O模型。否则管理上千个用户肯定性能不行。
      

  2.   

    1、  我们用的是select复用技术,因为这样,在Linux下也可以用。
     当然,那样是个很好的方法。不过,据了解,在对手没有用此技术的
     前提,也能搞定1500人,令我费解。
     2、  你的意思是,先把线程开好,然后作为资源调度?
      

  3.   

    1、如果一个线程对多个用户,在线程--套节字间,怎么管理? 
    realdreamer兄,不知有何高招。
       2、你门认为内存查找真的很耗时吗?每个线程查10次以内,那不是
    一瞬间吗?
       3、我用的是select复用技术,因为这样,在Linux下也可以用。
     当然,完成端口I/O那样是个很好的方法。不过,据了解,在对手没有用此技术的 前提,也能搞定1500人,令我费解。