java输入输出 -- I/O模型简述
2024-09-01 14:13:30
一、简介
本文向大家介绍五种I/O模型。分别是阻塞I/O、非阻塞I/O、I/O复用、信号驱动式I/O、异步I/O等。内容参考《UNIX网络编程》,大家想进深入学习网络编程,建议去读读这本书。
二、模型介绍
(一)、阻塞I/O模型
阻塞I/O是最简单的I/O,一般表现为进程或线程等待某个条件,如果条件不满足,则一直等下去。条件满足,则进行下一步操作。
上图中,应用进程通过系统调用 recvfrom 接收数据,但由于内核还未准备好数据报,应用进程就阻塞住了。直到内核准备好数据报,recvfrom 完成数据报复制工作,应用进程才能结束阻塞状态。
这里简单解释一下应用进程和内核的关系。内核即操作系统内核,用于控制计算机硬件。同时将用户态的程序和底层硬件隔离开,以保障整个计算机系统的稳定运转(如果用户态的程序可以控制底层硬件,那么一些病毒就会针对硬件进行破坏,比如 CIH 病毒)。应用进程即用户态进程,运行于操作系统之上,通过系统调用与操作系统进行交互。上图中,内核指的是 TCP/IP 等协议及相关驱动程序。客户端发送的请求,并不是直接送达给应用程序,而是要先经过内核。内核将请求数据缓存在内核空间,应用进程通过 recvfrom 调用,将数据从内核空间拷贝到自己的进程空间内。大致示意图如下:
阻塞 I/O 理解起来并不难,不过这里还是举个例子类比一下。
例1:假设大家日常工作流程设这样的(其实就是我日常工作的流程
最新文章
- Beta工作比例(Transcend)
- UIWebView显示乱码问题
- Winform中Grid跨行复制一列
- 字体大小自适应纯css解决方案
- [Java 实现AES加密解密]
- bootstrap框架-----可见 隐藏
- sicily 1022. Train Problem
- tar命令解压、压缩gz/bz2/xz文件
- java web(jsp)-The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path
- LINQ to SQL 基础
- Memcached安装卸载
- Docker容器的网络连接
- c语言二叉树的递归建立
- CSS--块级元素和行内元素
- Centos7 Crontab
- npm install权限问题,报错:permission denied。
- JAVA记录-SpringMVC scope属性的两种模式
- html5-移动端布局模板
- bulk_write&;Replace_one
- puppet更新失败