1、区别:
Blocking io 与 Non Bolocking io 主要区别在于:
bio:在我们调用一个io函数的时候,如果没有读取到数据的情况下,那么就会一直等待;在等待的过程会导致该线程一直处于阻塞的状态,无法做其他事情;即使我们使用了多线程去处理io函数,但是并发数量多的情况下依然会有阻塞和过度消耗cpu资源
nio:在我们调用io函数的时候,不论有没有读取到数据,我们都是会及时获取到结果的,如果没有获取到数据我们就不间断的循环重试,但是不会产生阻塞;
nio的最大特点就是多路io复用机制,就是单个线程中应用select、epoll管理者应用不同的原理来管理不同的tcp连接(ServerSocketChannel);select是windows环境中的管理者,它应用的是轮询的机制来获取链接的访问数据的,默认支持1024个链接阈值,性能不是很好,但是在linux环境中的epoll管理者采用了事件驱动回调机制,这样就从on的复杂度变为了o1的复杂度了,大大提高了nio的性能,也就能支持更多的连接,redis和nginx底层就是采用的nio;



2、linux中的五种网络模型
1)阻塞I/O(blocking
I/O)
2)非阻塞I/O (nonblocking
I/O)
3) I/O复用(select 和poll)
(I/O multiplexing)
4)信号驱动I/O (signal
driven I/O (SIGIO))
5)异步I/O (asynchronous
I/O (the POSIX aio_functions))
以下代码主要是比对应用jdk1.4前后的bio和nio的java Api区别;也体现了多路io复用机制的重要性
mayikt_socket.zip
