一条专用线程负责接受连接,把新接收到的socket通知线程池,线程池派其中一条线程处理该连接,当接收连接数量超过最大线程数时不再接收新连接,直到线程池有成员空闲下来了再次通知专用线程进行接收连接,线程池中的线程皆是处理完业务立即关闭socket,认为是短连接,这里的业务暂时实现为是发送小文件,经过测试,带md5验证,线程池最大线程数为5,100兆局域网内发一万个300字节左右的小文件耗时500秒左右。
用家嫌弃效率过低,其实这里的效率问题并不是后知后觉,只是觉得小功能模块对效率要求应该不会太高,所以用最直接的方式实现了,结果证明确实低估了用家的要求,于是马上改造成第二种方式,长连接。
仍然是线程池,仍实现为最大线程数为5,方便对比,此次没有了专用于接收连接的线程了,池内每条线程都accept同一个服务器socket,得到新socket之后马上处理,处理后不关闭,再次接收request并处理,循环往复,出于对程序结构的维护性要求,每条长连接实现成状态机,投入相同的环境测试,发送完那一万个文件耗时400秒左右,节省了一分四十秒。
用家暂时不再贪婪。