看网上书上的各种解释太绕口难理解了,看到个例子挺好的。
女儿去外地工作,不弄经常回来,父女俩通过信件进行沟通
1.阻塞IO
daughter走之后,father一直在小区收发室等信。
2.非阻塞IO
father过一会来看一次,看看信到了没有(效率不高,吞吐量可能会降低)
3.IO复用
收发室改造系统,father向小区注册,之后会在家添加一个提醒装置,有信到达的时候就会提醒
4.信号驱动IO
但是还是免不了去取信读信回信等操作,只要住户告诉小区物业具体的操作,小区物业就会按照步骤去做。
5.异步IO
小区自动回信,将回信结果告诉住户。
java nio->select/poll方式 -> epoll方式
Linux对所有的外部设备都看做是一个文件,对一个文件的读写操作会调用系统的命令,返回一个file description(fd)
进程将一个多个fd转的哥select/poll,这样select/poll可以侦测多个fd,select/poll采用轮训的方式,并且fd的支持数量有限,收到了一些约束。 -> epoll 基于事件的驱动方式代替扫描,因此性能更高。
java旧版本采用select/poll(1.4-1.5),后续采用epoll(>1.5)