java bio,nio,aio及源码
版权声明:本文为博主原创文章,未经博主允许不得转载。 目录 (?) [+] NIO 简介 随着JavaIO类库的不断发展和改进,基于Java的网络编程会变得越来越简单。随着异步IO功能的增强,基于JavaNIO开发的网络服务器甚至不逊色与C++开发的网络程序。 记录一下学习BIO、NIO编程模型以及JDK1.7提供的NIO2.0的使用。 传统的BIO编程 这个可以搜索一下socket,就有很多。 通过一个线程来监听所有的socket连接,连接成功则新建线程去处理客户端操作。 问题是伸缩性差,随着并发访问量增大,会很好系统资源,可能造成处理失败。由于是阻塞时的读写,会造成较大的读写延迟。 源码略。 伪异步IO编程 为了解决传统的编程模型问题,有人使用线程池或者消息队列实现N各线程处理M个客户端的模型。M远大于N。 模型图 Acceptor是一个线程,通过死循环来监听socket连接,如果有连接成功,则新建Runnable对象,提交给线程池处理。 源码分析 跟BIO的代码差不多,只是在Server端加了线程池,来处理客户端socket连接。并将连接封装到Runnable对象,并交给ThreadPool处理。 弊端 通过以上模型及代码分析,很容易知道通信底层还是使用的socket,读写还是同步阻塞的,因此,以上优化只是减小了过多创建销毁线程的开销,并不能从根本上解决阻塞读写产生的问题。