BIO(blocking)属于同步阻塞IO:监听端口调用accept一直阻塞直到有客户端连接才会继续往下走,随后对该客户端的请求进行R/W操作最终返回,在处理当前客户端请求时其他到来的请求都需要等待当前请求处理完毕才能继续。
缺点:当大量请求到达时等待时间过长会造成请求超时现象。为了解决阻塞导致请求超时现象,出现了非阻塞IO。
NIO(non-blocking)同步非阻塞IO:监听端口调用accept不会一直阻塞着等待客户端连接,而是每次轮询,当返回值为-1时代表当前没有客户端连接。当客户端连接时即可获取到连接对象,同时在处理客户端请求时可以抛出线程去执行,从而不会导致程序阻塞。
缺点:每次读取客户端连接请求都要进行一次用户态到内核态,内核态返回用户态的转换浪费系统资源。所以出现了多路复用模型。
SELECT(多路复用)同步非阻塞IO:SELECT是一种规范在POSIX中,在各个系统中都有实现。其原理是当监听端口调用select时会传入想要查询的fd数量,从而返回可以进行操作的有效的客户端连接。这样可减少用户态内核态的转换减少浪费系统资源。
缺点:SELECT一次请求fd的数量是有限制的每次最多只能请求1024个fd。所以出现了其优化版本POLL。
POLL(多路复用)同步非阻塞IO:与SELECT原理相同&#