Java网络编程(二)
这是本人学习Java过程中遇到的一些问题和解决方法,在此记录,方便本人查看,解决他人疑惑。
进程
早期的Internet虽然用户很少,但是却比现在更容易碰上超负荷的拥塞网站。问题不在于当时的机器不够强大,或者网络速度不够快,而在于当时的服务器实现技术太差。
那时大多数的FTP服务器会为每一个连接创建(fork)一个新的进程,也就是说当有100个并发用户意味着要处理100个额外的进程。进程是重量级的,所以当进程数过多时,服务器就会很快吃不消的。
同样早期的Web服务器也存在这个问题,不过由于http连接的短暂性而有所掩盖,由于Wen页面相对于FTP获取的软件包要小很多,所以Web用户不会像FTP用户那样对服务器施加太多负担。不过随着使用量的增长,Web服务器依然会性能下降。根本问题在于,Web服务器把每个新的连接和任务都当作一个单独的进程来处理,这种解决方案将无法扩展。
解决办法
- 重用进程
- 采用轻量级的线程代替进程
线程
线程是轻量级的,理论上
,使用线程代替进程,可以让服务器的性能提升三倍。再结合使用可复用的线程池,在同样的硬件和网络链接条件下,服务器的性能提升九倍多!
线程的替代方法
- 异步I/O
使用条件:如果一个应用同时需要数千个持续很长时间的连接,就要考虑异步I/O,而不是线程了。