课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了Linux编程开发环境下的io模型的重要性等内容,而今天我们就再来了解一下,Linux编程开发常见四种io模型都有哪些特点。
1、同步阻塞IO
在java应用进程中,默认情况下,所有的socket连接的IO操作是同步阻塞IO,java进程从IO系统调用开始,直到系统调用返回,这段时间内,java进程是阻塞的。
2、阻塞IO的优缺点
通过以上的栗子,我们来说说阻塞IO的优缺点:
优点:用户程序开发简单,在阻塞等待数据期间,用户线程挂起,这段时间内,用户线程基本不会占用CPU资源。
缺点:通常,会为每个连接配备一个独立的线程,由这个线程来维护一个连接的IO操作。那么在高并发的情况下,就需要大量的线程来维护大量的网络连接,内存和线程切换的开销将会非常巨大。
3、同步非阻塞NIO
socket连接默认是阻塞模式,在Linux系统中,可以通过设置将socket便成为非阻塞的模式。使用非阻塞模式的IO读写,叫做同步非阻塞IO,简称为NIO模式。
4、同步非阻塞IO的优缺点
优点:每次发起IO系统调用,在内核等待数据过程中可以立即返回,用户线程不会阻塞,实时性较好。
缺点:不断轮询内核,将会占用大量的CPU时间,浪费性能,效率低下,因此,在高并发的情况下,同步非阻塞模型也是不可用的。
5、IO多路复用模型
为了避免在同步非阻塞IO模型中轮询等待的问题,在IO多路复用模型中,引入了一种新的系统调用,查询IO的就绪状态。在Linux系统中,对应的系统调用为select/epoll系统调用,通过该系统调用,一个进程可以监视多个文件描述符,一旦某个文件描述符就绪(一般指的是内核缓冲区可读/可写),内核就能将就绪状态返回给应用程序。
6、异步IO模型(AIO)
用户线程通过系统调用,向内核注册某个IO操作,内核在整个IO操作完成后,通知用户程序,用户执行后续的操作。在整个异步IO模型中,包括内核将数据从网卡读取到内核缓冲区、将内核缓冲区的数据复制到用户缓冲区,用户程序不阻塞。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。