初识Netty

来源:互联网 发布:数据瀑布图画法 编辑:程序博客网 时间:2024/04/30 02:40

1.同步与异步的理解(http://www.cnblogs.com/lebronjames/archive/2010/10/09/1846690.html)
2.5种I/O模型:
1.http://www.cnblogs.com/fanzhidongyzby/p/4098546.html
2.select,poll,epoll理解(http://www.cnblogs.com/Anker/p/3265058.html)
BIO通信模型图:
(http://blog.csdn.net/anxpp/article/details/51512200)
传统的BIO模型,是一对一模型,一个请求会在服务端对应开辟一个线程,在高性能服务器中面对成千上万的请求。无法满足;
为了改进,形成了一种线程池,或者队列的方式
AIO:
是在BIO基础上的改进,形成线程池,或者队列的方式实现多个请求 对应多个线程,减少性能开销;但是会有以下的问题:
一单其中一个请求出现耗时过长,就会导致队列中的其他请求对象阻塞,最终导致Accepor中连接拒绝;
NIO:JDK中API (缓冲区)buffer实现类有byteBuffer,BooleanBuffer,CharBuffer等等,实现原理是数组操作;通道概念Channel
通道与流的概念不同的是,通道是双向的,流是单向的,要么是inputsetream 要么是outputstream,通道可以是读取也可以是写入或者同时进行属于全双工;

关于AIO的概念理解
关于AIO的概念,仅谈谈个人的一点理解。可能不到位,请大家指出。
Io的两个重要步骤:发起IO请求,和实际的IO操作。在unix网络编程的定义里异步和非异步概念的区别就是实际的IO操作是否阻塞。如果不是就是异步,如果是就是同步。
而阻塞和非阻塞的区别在于发起IO请求的时候是否会阻塞,如果会就是阻塞,不会就是非阻塞。

本人理解能力有限,想了个例子来辅助自己理解:
小明想要买一本<深入java虚拟机>的书,以下几个场景可以来理解这几种io模式:
1. 如果小明每天都去书店问售货员说有没有这本书,如果没有就回去继续等待,等下次再过来文。(阻塞)
2. 如果小明告诉售货员想买一本<深入java虚拟机>的书,那么就在家里等着做其他事情去了,如果书到了售货员就通知小明,小明再自己过去取。
3. 如果小明告售货员想买一本<深入java虚拟机>的书,然后告诉售货员到了帮他送到某某地方去,就做其他事情去了。小明就不管了,等书到了,售货员就帮他送到那个地方了。

售货员可以认为是操作系统的一个服务,而小明是一个用户进程。不知道是否有误,如果有误请大家拍砖指出,谢谢。
可以看出2,3的效率明显要比1高。但是1最简单,而2,3需要一些协作。充分证明了团队合作的力量

多路复用器:selector

0 0
原创粉丝点击