从网络I/O模型到Netty
|
的进程的IO可以注册到一个复用器(selector)上,然后用一个进程调用select,select会监听所有注册进来的IO。 举个例子。 在BIO模式中,一个老师(应用进程/线程)只能同时处理一个同学(IO流)的问题。如果有10个同学,就需要配置10个老师来做一对一的讲解。 在IO多路复用模型中。我们给 老师 配置了一个 班长(复用器Selector)。班长 负责观察班级里的10个同学谁要提问,一旦有同学举手,班长就反馈老师去处理这个举手同学的问题。 这样一来,只需要1个老师,老师 只需要注意 班长 的反馈,就能及时处理对应的 同学 的问题了。 下面我们具体来看看I/O多路复用的三种实现:select、poll、epoll。
2. select 数的作用是: 通过轮询,可以同时监视多个文件描述符是否发生了读、写、异常这三类IO事件。 最后返回发生IO事件的文件描述符数量,以及读事件、写事件、异常事件这三种事件分别发生在哪些文件描述符中(readfds、writefds、errorfds三个参数)。
我们结合 老师-班长-同学 的模型来理解下这个过程。
特别注意,在select函数下,老师仅仅知道有学生发生变化了,但到底是哪些学生发生变化,他需要 轮询 一遍同学名单(xxxfds),找出举手的同学,然后和他进行交流。 select的缺点比较明显:
(编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



浙公网安备 33038102330468号