完成端口与线程池的几点疑问
最近在看一些关于如何提升Socket服务器性能的资料,看到完成端口模型,给我的第一感觉就是方便易用,虽然做的初始化工作可能有点多,当然线程池也是我关注的一点,上网看了一些相关的帖子之后,发现不少人使用完成端口模型来实现自己的线程池,那我就有如下疑问了:
1、完成端口本身就是利用重叠IO的思想基于同步消息队列以及线程池技术来实现这么一个“生产者-消费者”模型,既然它已经是对线程池的一个封装了,为何还有人利用完成端口模型来构建线程池呢?利用完成端口,已经完全可以实现跟使用线程池相同的效率了,我怎么感觉是多此一举,当然也许是我的理解有误。
2、目前我正在做一个Socket通信服务器,客户端应该有5000~10000个左右,基于完成端口做的,我在工作者线程中收取到客户端发送的数据之后是直接做业务处理的(业务处理也在工作者线程中),但是有的业务处理需要较长的处理时间,并且一旦客户端的请求数量突发性的增大,那么服务器的响应性就非常差了,虽然可以通过设置增加工作者线程数量以及并发线程数量来提高一定的响应性,但是这个值是难以确定的,小弟在此请教各位,该如何设计才能在尽量减少内存消耗的前提下提高服务器的吞吐能力呢?