服务器端编程经常需要构造高性能的IO模型
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的会同网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!IO模型主要分为:
阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。
1.阻塞式IO
应用进程被阻塞,知道数据复制到应用进程缓冲区才返回。在阻塞过程中,其他程序还可以执行,因此阻塞并不意味着整个操作系统被阻塞。因为其他程序还可以运行,因此不消耗CPU时间,这种模型的CPU利用率会比较高。
2.非阻塞IO
应用程序执行系统调用之后,内核返回一个错误码。应用程序还可以继续运行,但是需要不断的执行系统调用来获知IO是否完成,这种方式成为轮询。
由于CPU要处理更多的系统调用,因此这种模型的CPU利用率比较低。
3.IO复用
使用select或者poll等待数据,并且可以等待多个套接字中的任何一个变为可读。这一过程会被阻塞,当某一个套接字可读时返回,之后使用recvfrom把数据从内核复制到进程中。
它可以让但个进程具有处理多个I/O事件的能力,又被称为Event Driven IO,即事件驱动IO。
4.信号驱动IO
应用进程使用sigaction系统调用,内核立即被返回,应用进程可以继续执行,也就是说等待数据阶段应用程序时非阻塞的。内核在数据到达时向应用进程发送SIGIO信号,应用进程收到之后在信号处理程序中调用recvfrom将数据从内核中复制到应用进程。
相比于非阻塞IO的轮询方式,信号驱动I/O的CPU利用率更高。
5.异步IO
应用进程执行aio_read系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号。
异步IO与信号驱动IO的区别在于,异步IO的信号是通知应用进程IO完成,而驱动IO的信号是通知应用程序可以开始IO。
以上就是常见的五种IO模型介绍,需要图解或详细教学的可以私信或评论联系我。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:java的IO模型有几种-创新互联
转载来源:http://scpingwu.com/article/csjjij.html