谁能给我讲讲一个高效的server的设计思路?? 比如server运行后开始监听,一旦有用户连接就开出一个线程去响应他,同时在这个线程中又开出“收线程”和“发线程”,当用户退出后这个线程先结束“收线程”和“发线程”然后再结束自己。这样做是否可行?谁能给我讲一个效率高的思路?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果为每一CLIENT开辟读写线程,到一定数量时候,你的线程数与性能会成反比。现在一般都是使用线程池的技术,也就是说使用一堆线程为一堆CLIENT服务。 比如server运行后开始监听,一旦有用户连接就开出一个线程去响应他,同时在这个线程中又开出“收线程”和“发线程”,当用户退出后这个线程先结束“收线程”和“发线程”然后再结束自己。这样做是否可行?那按照这个做法假设每10个连接开一个线程是不是就是类似线程池的做法呢?给我讲讲线程池的概念吧 需求: 现在有1000-6000(假设有这么多)个PDA(通过802.11模块), 要向一台Windows 2K,(or 2K Server)发请求包,请求Server提供服务,Server要Read ,Write,Update 后台数据库(我计划用MS SQL Server),然后把数据库操作的结果发给客户机!我的想法: 一个完成端口+数据包发送线程池 处理Server=====〉PDA的数据 从发送队列中取出要发送的数据发送出去! 一个完成端口+数据包接受线程池 处理PDA======〉Server的数据 把接受到的数据挂到 一个接受队列中 再用一个 逻辑处理线程池 完成后台数据库的操作。 不知道我的想法是否合适:使用完成端口,将接收到的数据存入一个队列,然后开N个线程处理这些数据,将处理完的结果发送出去。线程个数可以在测试过程中找一个适当的值。这样可以避免服务连接过多时,开的线程太多,导致系统响应变慢。如果通讯数据量很小的时候,可以将一部分线程挂起,当队列等候超过某个值时再唤醒!!当然这N个线程是服务启动的时候就创建了,至于什么时候工作什么时候挂起就看你设置的队列等候值了!你也可以做多重开关,比如队列等候大于A的时候开10,大于B的时候开20,这样去设置应该可以提高效率 列表控件的数据修改显示后该如何写入原文件? 问一个有关64/32位版本的msado15.dll的事情。 vc6,ClistCtrl(Report类型),如何用代码显示/隐藏标题栏 组合框或者是列表框 显示本地磁盘 一个dll,我知道有几个进程在调用这个动态库呢? 实在不明白exit与return的功能区别,请指教! 在vc.net中,用CString定义一字符串,怎样提取单个字符。 如何截获OCX控件的EVENT 帮忙测试一个关于代理服务器的程序,帮忙测试人员可以所取源代码 加急问题!!大虾帮帮忙 如何将dialog设置到指定位置? 关于HOOK
那按照这个做法假设每10个连接开一个线程是不是就是类似线程池的做法呢?
给我讲讲线程池的概念吧
现在有1000-6000(假设有这么多)个PDA(通过802.11模块), 要向一台Windows 2K,(or 2K Server)发请求包,请求Server提供服务,Server要Read ,Write,Update 后台数据库(我计划用MS SQL Server),然后把数据库操作的结果发给客户机!我的想法:
一个完成端口+数据包发送线程池 处理Server=====〉PDA的数据 从发送队列中取出要发送的数据发送出去! 一个完成端口+数据包接受线程池 处理PDA======〉Server的数据 把接受到的数据挂到
一个接受队列中
再用一个 逻辑处理线程池 完成后台数据库的操作。
使用完成端口,将接收到的数据存入一个队列,然后开N个线程处理这些数据,将处理完的结果发送出去。线程个数可以在测试过程中找一个适当的值。
这样可以避免服务连接过多时,开的线程太多,导致系统响应变慢。如果通讯数据量很小的时候,可以将一部分线程挂起,当队列等候超过某个值时再唤醒!!
当然这N个线程是服务启动的时候就创建了,至于什么时候工作什么时候挂起就看你设置的队列等候值了!你也可以做多重开关,比如队列等候大于A的时候开10,大于B的时候开20,这样去设置应该可以提高效率