比如server运行后开始监听,一旦有用户连接就开出一个线程去响应他,同时在这个线程中又开出“收线程”和“发线程”,当用户退出后这个线程先结束“收线程”和“发线程”然后再结束自己。这样做是否可行?
谁能给我讲一个效率高的思路??

解决方案 »

  1.   

    如果为每一CLIENT开辟读写线程,到一定数量时候,你的线程数与性能会成反比。现在一般都是使用线程池的技术,也就是说使用一堆线程为一堆CLIENT服务。
      

  2.   

    比如server运行后开始监听,一旦有用户连接就开出一个线程去响应他,同时在这个线程中又开出“收线程”和“发线程”,当用户退出后这个线程先结束“收线程”和“发线程”然后再结束自己。这样做是否可行?
    那按照这个做法假设每10个连接开一个线程是不是就是类似线程池的做法呢?
    给我讲讲线程池的概念吧
      

  3.   

    需求:
         现在有1000-6000(假设有这么多)个PDA(通过802.11模块), 要向一台Windows 2K,(or 2K Server)发请求包,请求Server提供服务,Server要Read ,Write,Update 后台数据库(我计划用MS SQL Server),然后把数据库操作的结果发给客户机!我的想法:
         一个完成端口+数据包发送线程池      处理Server=====〉PDA的数据 从发送队列中取出要发送的数据发送出去!                                               一个完成端口+数据包接受线程池      处理PDA======〉Server的数据 把接受到的数据挂到
                                            一个接受队列中    
         再用一个 逻辑处理线程池 完成后台数据库的操作。
      

  4.   

    不知道我的想法是否合适:
    使用完成端口,将接收到的数据存入一个队列,然后开N个线程处理这些数据,将处理完的结果发送出去。线程个数可以在测试过程中找一个适当的值。
    这样可以避免服务连接过多时,开的线程太多,导致系统响应变慢。如果通讯数据量很小的时候,可以将一部分线程挂起,当队列等候超过某个值时再唤醒!!
    当然这N个线程是服务启动的时候就创建了,至于什么时候工作什么时候挂起就看你设置的队列等候值了!你也可以做多重开关,比如队列等候大于A的时候开10,大于B的时候开20,这样去设置应该可以提高效率