首先,股票软件的数据是每分钟一次,而且是有需求的client发请求,服务器响应而已;
其次,象你说的需要广播的情况是有,比如聊天室,但是你可以看看,一个聊天室服务器服务2000用户,并不代表这2000用户都在一个房间里,而只有在一个房间的时候才需要广播通知,所以最好的办法是设计上分开逻辑组,那么广播的时候就只需要广播几个-200个左右的client了,现在一般的房间都只允许进200个人左右就是这个道理.
再次,如果说一定要做千人级别的广播,那么时延是避免不了的,而且势必要常常砍掉那些网络不好的client,以加快速度.下面是对这种情况的分析:
如果用阻塞,在遍历发送时最大的问题就是,这1000个client其中某几个client网络不好甚至断线了,那么单线程遍历发送时,剩下的client就要等,而如果通过设置一个比较短的超时的办法也不理想,因为可能会导致有些网络不好不坏的client收不到,所以用异步的完成端口确实在处理方面要简单一些,而且不用你关心线程方面的细节,效率相当高,实际上等于是系统内部帮你处理了线程操作.不过如果需要能够移植到linux平台,建议使用线程池,估计效果还不错,比如你池里有50个工作线程,50个线程同时都遇上网络不好的client的机会比较小,再加上你设置了一个中等时间的发送超时,我想这样的设计应该是比较好了.不知道比起完成端口的效率会有什么区别,没环境测试啊,不过我从理论上的感觉是应该差不多的,因为我认为完成端口就是一个线程池,而且它的同步以及通知还用到了事件对象,而你用线程池的话,可以使用效率更高的临界段.